Commit Graph

1490 Commits

Author SHA1 Message Date
robk-tahoe
0d2eb1edf6 stats_gatherer: verbose debug logging
one of the storage servers is throwing foolscap violations about the
return value of get_stats().  this adds a log of the data returned
to the foolscap log event stream at the debug level '12' (between
NOISY(10) and OPERATIONAL(20))  hopefully this will facilitate
finding the cause of this problem.
2008-04-09 16:10:53 -07:00
robk-tahoe
27ac71458f key_generator: remove poll timeouts from test
the timeouts on uses of 'poll' were there purely to make sure a test doesn't
poll indefinitely.  however having such timeouts makes tests susceptible 
to premature timeouts under high load, or on slow machines. (e.g. cygwin 
slaves running in virtual machines on loaded hosts)

purportedly trial by default applies a timeout to tests to prevent them
hanging out indefinitely, so these poll timeouts are redundant and cause
intermittent failures on slow hosts.  hence they're more bother than they're
worth, and should be culled.
2008-04-08 11:06:58 -07:00
robk-tahoe
8e9e56fdd0 key_generator: fix a typo in the .tac generating create-key-generator
verbose is an object attribute, no longer settable via init args
2008-04-08 11:06:06 -07:00
Zooko O'Whielacronx
8783eabf5a don't do a du on startup if there is no size limit configured
This also turns off the production of the "space measurement done" log message, if there is no size limit configured.
2008-04-08 11:36:56 -07:00
robk-tahoe
30eaaa7862 key_generator: fix timing, make tests more robust
previously there was an edge case in the timing of expected behaviour
of the key_generator (w.r.t. the refresh delay and twisted/foolscap
delivery).  if it took >6s for a key to be generated, then it was 
possible for the pool refresh delay to transpire _during_ the 
synchronous creation of a key in remote_get_rsa_key_pair.  this could
lead to the timer elapsing during key creation and hence the pool
being refilled before control returned to the client.

this change ensures that the time window from a get key request
until the key gen reactor blocks to refill the pool is the time
since a request was answered, not since a request was asked.
this causes the behaviour to match expectations, as embodied in
test_keygen, even if the delay window is dropped to 0.1s
2008-04-03 18:43:46 -07:00
robk-tahoe
c838cfef44 key_generator: up timeouts on keygen test
in both these cases, the timeout only serves to abort a stuck test, and
the key_generator should respond more quickly, but seeing test failures
in buildbot on some platforms suggests that the test is too susceptible
to timing issues on loaded buildslaves.
2008-04-03 16:26:24 -07:00
robk-tahoe
1ae2c39862 key_generator: service related cleanups, incorporation into system test
this cleans up KeyGenerator to be a service (a subservice of the
KeyGeneratorService as instantiated by the key-generator.tac app)
this means that the timer which replenishes the keypool will be
shutdown cleanly when the service is stopped.

adds checks on the key_generator service and client into the system
test 'test_mutable' such that one of the nodes (clients[3]) uses
the key_generator service, and checks that mutable file creation
in that node, via a variety of means, are all consuming keys from
the key_generator.
2008-04-03 15:57:07 -07:00
robk-tahoe
ccda06b061 key_generator: added a unit test
implemented a unit test of basic KeyGenService functionality,
fixed a bug in the timing of pool refreshes
2008-04-03 13:01:43 -07:00
Brian Warner
06dae8fd67 trial_figleaf.py: make our figleaf code compatible with both Twisted-8.x and Twisted-2.5.x 2008-04-02 17:48:55 -07:00
robk-tahoe
5578559b85 added offloaded key generation
this adds a new service to pre-generate RSA key pairs.  This allows
the expensive (i.e. slow) key generation to be placed into a process
outside the node, so that the node's reactor will not block when it
needs a key pair, but instead can retrieve them from a pool of already
generated key pairs in the key-generator service.

it adds a tahoe create-key-generator command which initialises an 
empty dir with a tahoe-key-generator.tac file which can then be run
via twistd.  it stashes its .pem and portnum for furl stability and
writes the furl of the key gen service to key_generator.furl, also
printing it to stdout.

by placing a key_generator.furl file into the nodes config directory
(e.g. ~/.tahoe) a node will attempt to connect to such a service, and
will use that when creating mutable files (i.e. directories) whenever
possible.  if the keygen service is unavailable, it will perform the
key generation locally instead, as before.
2008-04-01 18:45:13 -07:00
Brian Warner
f9e261d939 introducer.py: accelerate reconnection after being offline. Closes #374.
When we establish any new connection, reset the delays on all the other
Reconnectors. This will trigger a new batch of connection attempts. The idea
is to detect when we (the client) have been offline for a while, and to
connect to all servers when we get back online. By accelerating the timers
inside the Reconnectors, we try to avoid spending a long time in a
partially-connected state (which increases the chances of causing problems
with mutable files, by not updating all the shares that we ought to).
2008-03-31 15:28:45 -07:00
Brian Warner
d6be5116f5 storage: emit log messages on bucket allocate/read and mutable writev 2008-03-27 17:33:58 -07:00
Brian Warner
2c96a32633 helper: add more stats to webapi, at /helper_status 2008-03-27 16:46:08 -07:00
Brian Warner
36f5c025a6 helper: add stats for the gatherer, show some on the webish welcome page 2008-03-27 15:55:32 -07:00
Brian Warner
9b3a32d0b3 add GET /uri/URI/?t=deep-size, to compute the total size of immutable files reachable from a given directory 2008-03-27 11:33:42 -07:00
Brian Warner
3f5fed0bd4 node.py: make twistd.pid world-readable, so stats-gathering tools (specifically memory-measuring munin plugins) can see it 2008-03-26 18:37:54 -07:00
Brian Warner
04b690ac9e web-status: client methods like list_all_uploads() return Upload instances,
not status instances. Fix this. The symptom was that following a link like
'up-123' that referred to an old operation (no longer in memory) while an
upload was active would get an ugly traceback instead of a "no such resource"
message.
2008-03-26 18:20:07 -07:00
Brian Warner
4531d1e953 introweb.py: add ?t=json, to provide machine-readable subscriber counts 2008-03-25 12:56:12 -07:00
Brian Warner
4b46f1cd53 encode.py: also record the size, along with plaintext_hash and SI 2008-03-24 19:08:15 -07:00
Brian Warner
15ef9f624d encode: log a plaintext hash and SI for each upload. This will allow the log gatherer to correlate the two, to better measure the benefits of convergence 2008-03-24 18:55:37 -07:00
robk-tahoe
7f14b93341 confwiz: set a convergence domain based on root_dir upon config
when the confwiz configures a node (i.e. typically once on mac, once per
install on windows) in addition to writing the root_dir.cap retrieved from
the native_client backend into a config file, it additionally writes a hash
thereof into the 'convergence' config file.

this causes uploads from this node to use a consistent 'convergence' hashing
value matching any other nodes with the same configured root_dir, i.e. for
the most part other systems installed and configured on the same account.
2008-03-24 15:47:12 -07:00
robk-tahoe
d25d3065d1 mutable: revise a couple of error messages
at brian and zooko's suggestion, reword an error message encountered when
multiple writers are racing to make overlapping changes to a directory
2008-03-24 15:46:28 -07:00
Brian Warner
1869d7c29b upload.py: remove spurious trailing quotes that confuse syntax-highlighting 2008-03-24 15:51:19 -07:00
Brian Warner
1e097766c9 disable plaintext hashes in shares, but leave a switch to turn it back on 2008-03-24 13:39:51 -07:00
Brian Warner
7b21054c33 UNDO: upload: stop putting plaintext and ciphertext hashes in shares.
This removes the guess-partial-information attack vector, and reduces
the amount of overhead that we consume with each file. It also introduces
a forwards-compability break: older versions of the code (before the
previous download-time "make hashes optional" patch) will be unable
to read files uploaded by this version, as they will complain about the
missing hashes. This patch is experimental, and is being pushed into
trunk to obtain test coverage. We may undo it before releasing 1.0.
2008-03-23 15:35:54 -07:00
Zooko O'Whielacronx
dfdbb95648 fix check-memory to use new upload API (which requires a "convergence" argument), and change it to measure convergence instead of random-key, since convergence is the use case we care about more 2008-03-24 15:28:04 -07:00
Zooko O'Whielacronx
fc3bd0c987 use added secret to protect convergent encryption
Now upload or encode methods take a required argument named "convergence" which can be either None, indicating no convergent encryption at all, or a string, which is the "added secret" to be mixed in to the content hash key.  If you want traditional convergent encryption behavior, set the added secret to be the empty string.

This patch also renames "content hash key" to "convergent encryption" in a argument names and variable names.  (A different and larger renaming is needed in order to clarify that Tahoe supports immutable files which are not encrypted content-hash-key a.k.a. convergent encryption.)

This patch also changes a few unit tests to use non-convergent encryption, because it doesn't matter for what they are testing and non-convergent encryption is slightly faster.
2008-03-24 09:46:06 -07:00
Brian Warner
7996131a0a upload: stop putting plaintext and ciphertext hashes in shares.
This removes the guess-partial-information attack vector, and reduces
the amount of overhead that we consume with each file. It also introduces
a forwards-compability break: older versions of the code (before the
previous download-time "make hashes optional" patch) will be unable
to read files uploaded by this version, as they will complain about the
missing hashes. This patch is experimental, and is being pushed into
trunk to obtain test coverage. We may undo it before releasing 1.0.
2008-03-23 15:35:54 -07:00
Brian Warner
553367d567 download: make plaintext and ciphertext hashes in the UEB optional.
Removing the plaintext hashes can help with the guess-partial-information
attack. This does not affect compatibility, but if and when we actually
remove any hashes from the share, that will introduce a 
forwards-compatibility break: tahoe-0.9 will not be able to read such files.
2008-03-23 14:46:49 -07:00
robk-tahoe
f14c498e4f confwiz: refine the descriptive text on the conf wiz pages 2008-03-18 17:06:47 -07:00
robk-tahoe
605d693fa3 confwiz: reworked confwiz look and feel
this changes the confwiz to have a look and feel much more consistent
with that of the innosetup installer it is launched within the context
of.  this applies, naturally, primarily to windows.
2008-03-18 16:15:36 -07:00
robk-tahoe
e75c417bb5 webish mkdir-p: added unit test
added a test for the simple mkdir-p hack I added yesterday

checks that mkdir-p can create a directory hierarchy, and that resubmitting
a request for the same path yields the existing dir's uri
2008-03-18 13:11:08 -07:00
robk-tahoe
08fd16ef78 add a mkdir-p POST handler
this adds a t=mkdir-p call to directories (accessed by their uri as
/uri/<URI>?t=mkdir=p&path=/some/path) which returns the uri for a 
directory at a specified path before the given uri, regardless of
whether the directory exists or whether intermediate directories
need to be created to satisfy the request.

this is used by the migration code in MV to optimise the work of
path traversal which was other wise done on every file PUT
2008-03-17 18:13:01 -07:00
Brian Warner
75b52cda5c web/status.py: guard against file_size=None, closes #354 2008-03-17 13:31:10 -07:00
Zooko O'Whielacronx
7bc06872ac refactor one of the dispatch routines in webish.py
The behavior is intended to be unchanged by this refactoring.  Unit tests show no change in behavior.
2008-03-20 12:11:09 -07:00
Brian Warner
2ef70ab814 mutable.py: split replace() into update() and overwrite(). Addresses #328. 2008-03-12 18:00:43 -07:00
Zooko O'Whielacronx
0aa0efa123 storage servers announce that they will support clients as old as v0.8.0
Not that anyone pays attention to what storage servers claim about what versions they will support.
2008-03-13 09:10:11 -07:00
Brian Warner
45a1e655c7 introducer: record a timestamp with each announcement, and display it on the introducer's web page 2008-03-11 19:33:19 -07:00
Brian Warner
29e23626ad introducer: record a timestamp with each subscriber, and display it on the introducer's web page 2008-03-11 19:28:37 -07:00
Brian Warner
89be2e1bea introweb: combine announcement and subscriber information to show version+nickname for each client 2008-03-11 19:21:29 -07:00
Brian Warner
c21d30c320 client: publish a 'stub client' announcement to the introducer, to provide version/nickname information for each client 2008-03-11 19:20:10 -07:00
Brian Warner
0c40513e75 webish: put a trailing slash in the node.url file, since our unit tests use it, and some versions of twisted or nevow don't automatically add one 2008-03-11 19:01:18 -07:00
Brian Warner
fd5a922cad introweb.py: tolerate non-setLocationed client tubs 2008-03-11 18:09:13 -07:00
Brian Warner
3f5abe5cba oops, add introducer.xhtml 2008-03-11 17:41:03 -07:00
Brian Warner
810ba68343 add a webserver for the Introducer, showing service announcements and subscriber lists 2008-03-11 17:36:25 -07:00
Brian Warner
10d3ea5045 increase remote-interface size limits to 16EiB by not casually using 'int' as a constraint 2008-03-11 10:50:31 -07:00
Brian Warner
c727348d85 mutable: tolerate multiple encodings, using whichever version is recoverable first. Closes #312 2008-03-11 00:26:00 -07:00
Brian Warner
791482cf8d test_mutable: improve multiple-encodings test coverage 2008-03-10 23:47:35 -07:00
Brian Warner
9ca55b8b79 test_mutable: make test-multiple-encodings work 2008-03-10 23:16:28 -07:00
Brian Warner
57bd23f35f test_mutable: more test coverage, building up a framework to cause reads to occur in a specific order 2008-03-10 22:15:43 -07:00
Brian Warner
2464899f9a mutable: increase max segsize to 3.5MB, to allow dirnodes with about 10k entries 2008-03-10 20:39:55 -07:00
Zooko O'Whielacronx
a8a85da326 make the nodeurl start with '127.0.0.1' instead of with 'localhost'
This is because there exist in the wild computers that are misconfigured so that 'localhost' doesn't resolve to 127.0.0.1.  On those computers, using 'localhost' for the nodeurl is a security problem, because the user commonly sends valuable caps to the nodeurl.
2008-03-11 06:18:03 -07:00
Brian Warner
11445b5109 test_mutable: exercise short reads too 2008-03-10 18:08:23 -07:00
robk-tahoe
a1f2c9d624 confwiz: write accountname to a file
motivated simply by a desire to be able to identify 'noderoot' directories for
debugging and testing, the confwiz now writes an 'accountname' files based on 
what account was used when the node was configured.  this is not currently read
by or used by any code in the system, but helps identify directories from testing.
2008-03-10 17:50:44 -07:00
Brian Warner
be5a6147b4 test_mutable: test all hash-failure cases except a corrupted encrypted private key 2008-03-10 17:46:52 -07:00
Brian Warner
647734cd3b test_mutable: add Roundtrip test, suitable for new share-mangling tests 2008-03-10 16:14:08 -07:00
Brian Warner
9e460cd22e mutable: cosmetic changes 2008-03-10 15:44:05 -07:00
Brian Warner
d6cde55c63 mutable: minor refactoring of _do_read, to make other tests easier 2008-03-10 15:42:56 -07:00
Zooko O'Whielacronx
cad26e000d fix pyflakes warning 2008-03-10 16:14:03 -07:00
Brian Warner
567979ba85 lower max_segsize for immutable files to 128KiB, to make download-progress smoother and improve alacrity. Closes #252. Note that mutable files continue to use 1MiB segments. 2008-03-07 19:24:51 -07:00
robk-tahoe
bd58f6f799 macapp: new mac icon
this provides a new icon for the .app bundle
also removes the setting of the dock icon from within wx
(which previously used a different icon)
2008-03-07 18:48:28 -07:00
Brian Warner
8815b30b9b webish: show storage sizelimit, abbreviate current usage 2008-03-06 21:16:38 -07:00
robk-tahoe
6177a958d0 macapp: simplify node startup failure reporting
1. changed the node's exit-on-error behaviour. rather than logging debug and
then delegating to self for _abort_process() instead simply delegate to self
_service_startup_failed(failure) to report failures in the startup deferred
chain. subclasses then have complete control of handling and reporting any
failures in node startup.

2. replace the convoluted wx.PostEvent() glue for posting an event into the
gui thread with the simpler expedient of wx.CallAfter() which is much like
foolscap's eventually() but also thread safe for inducing a call back on the
gui thread.
2008-03-06 15:09:04 -07:00
robk-tahoe
ee67d788cd macapp: report failure of node startup to the user
in certain cases (e.g. the node.pem changed but old .furls are in private/)
the node will abort upon startup. previously it used os.abort() which in these
cases caused the mac gui app to crash on startup with no explanation.

this changes that behaviour from calling os.abort() to calling 
node._abort_process(failure) which by default calls os.abort().  this allows 
that method to be overridden in subclasses.

the mac app now provides and uses such a subclass of Client, so that failures
are reported to the user in a message dialog before the process exits.
this uses wx.PostEvent() with a custom event type to signal from the reactor
thread into the gui thread.
2008-03-06 13:53:21 -07:00
Brian Warner
3a8bd1b772 webish: add more share information to upload status, including assisted uploads 2008-03-05 19:51:51 -07:00
Brian Warner
dd4a951770 webish: add publish status 2008-03-05 18:41:10 -07:00
robk-tahoe
2c81988ed3 confwiz: add nickname determination
the confwiz now uses socket.gethostname() if a 'nickname' file doesn't already
exist, and passes that nickname into the 'record_install' method on the backend,
so that the moniker can be recorded in the system table.
2008-03-05 16:34:18 -07:00
Brian Warner
3a331f6822 webish: split out 'unlinked' operations 2008-03-05 15:12:42 -07:00
Brian Warner
4fa622f9b1 webish: this file is too big, start breaking it into pieces, beginning with status 2008-03-05 14:59:56 -07:00
Brian Warner
f46cb5cd6d mutable-retrieve: only record server response times for queries that we don't ignore 2008-03-04 21:10:52 -07:00
Brian Warner
8160a4f2f2 mutable: when retrieving, don't try to grab the encprivkey, to save a roundtrip 2008-03-04 21:08:24 -07:00
Brian Warner
ec23da28a6 webish: add more mutable-retrieve timing status 2008-03-04 21:04:36 -07:00
Brian Warner
ca1a1762e2 web: status: add 'started' timestamps to all operations 2008-03-04 18:50:44 -07:00
Zooko O'Whielacronx
cedc653aa5 apply dreid's patch from #335 to fix the provisioning page in zipped distributions 2008-03-09 08:50:46 -07:00
Brian Warner
7d9bfbcabe mutable: oops, .download *is* in use, by the speedtest. Restore it and add a test. 2008-03-04 15:11:40 -07:00
Brian Warner
4daa817502 test_util.py: get 100% test coverage for hashutil.py 2008-03-04 14:42:25 -07:00
Brian Warner
95a085763f uri.py: get 100% test coverage, fix a few bugs in the process 2008-03-04 14:27:45 -07:00
Brian Warner
72f139653b mutable.py: remove unused 'download' method (we only have download_to_data for now) 2008-03-04 14:01:55 -07:00
Brian Warner
e6489b1ef2 test_filenode.py : improve coverage of mutable filenode, fix a bug in __hash__ 2008-03-04 14:01:28 -07:00
Brian Warner
f6ca62df31 test_system: improve test coverage of publish/retrieve status 2008-03-04 01:24:35 -07:00
Brian Warner
68fbd89e66 webish: add primitive publish/retrieve status pages 2008-03-04 01:07:44 -07:00
Brian Warner
7e159feb27 stats: make StatsGatherer happy about sharing a process with other services, add one during system test to get some test coverage 2008-03-03 23:55:58 -07:00
Brian Warner
abb51e70f3 test_web: improve upload/download status coverage 2008-03-03 21:56:23 -07:00
Brian Warner
3ecb483e35 test_system: add test coverage for download-status and upload-status 2008-03-03 21:37:17 -07:00
Brian Warner
18eb00d136 webish: download-results: add per-server response times 2008-03-03 20:53:45 -07:00
Brian Warner
886ef22335 webish: download-results: add server_problems 2008-03-03 20:30:35 -07:00
Brian Warner
def910c391 webish download results: add servermap, decrypt time 2008-03-03 20:09:32 -07:00
Brian Warner
2b49605c51 webish: add 'download results', with some basic timing information 2008-03-03 19:19:21 -07:00
Brian Warner
c8e24f0904 webish: make upload timings visible on the recent uploads/downloads status page 2008-03-03 14:48:52 -07:00
Brian Warner
436baa1b19 webish: add per-file upload/download status pages 2008-02-29 23:03:00 -07:00
Brian Warner
1a7651ce82 retain 10 most recent upload/download status objects, show them in /status . Prep for showing individual status objects 2008-02-29 22:19:03 -07:00
robk-tahoe
33c7733e35 macfuse: increase default timeout in ui launched mounts
when an operation takes 'too long', on 10.4 the user gets a dialog about
the problem with a 'force eject / keep trying' choice. on 10.5 the fuse
system seems to summarily unmount the drive.

this showed up in 10.5 testing because the time to open() a file depended
upon the size of the file, and an 8Mb test file took long enough for the
node to download that the open() call didn't respond within 60s and fuse
spontaneously ejected the drive, quitting the plugin (and cancelling the
download).

this changes the fuse options passed to the plugin by the ui when the 
'mount filesystem' window is used.  command line users should check out
the '-odaemon_timeout=...' option.  this changes the default timeout from
60s to 300s (5min) for ui launched plugins.

this will be addressed in a deeper manner at a later date, with a more
advanced fuse subsystem which can interleave open()/read() with the
actual download of the file, only blocking when data is not downloaded
yet.
2008-02-29 20:18:15 -07:00
Brian Warner
23de3e32d6 client.py: remove confusing no-longer-used code from get_encoding_parameters 2008-02-29 20:01:54 -07:00
Brian Warner
93d3960d4d upload: fix up some log messages 2008-02-29 20:00:45 -07:00
Zooko O'Whielacronx
30c9b21d6b wui/wapi/webish: HTML form checkboxes send the value "on", so let's interpret that as boolean true 2008-02-29 20:29:42 -07:00
Zooko O'Whielacronx
99f006c584 wapi: add POST /uri/$DIRECTORY?t=set_children
Unfinished bits: doc in webapi.txt, test handling of badly formed JSON, return reasonable HTTP response, examination of the effect of this patch on code coverage -- but I'm committing it anyway because MikeB can use it and I'm being called to dinner...
2008-02-29 18:40:27 -07:00
Zooko O'Whielacronx
ef46e16aa9 test: refactor webist.POSTHandler() to have a method for each "?t=" command
Input validation and decoding is still done in the body of POSTHandler.renderHTTP().
2008-02-29 13:11:18 -07:00
Zooko O'Whielacronx
4287079455 test: update todo string in test_nevow 2008-02-29 13:10:08 -07:00
Peter Secor
cf25b56474 config wizard - changing the name 2008-02-26 19:55:54 -07:00
Peter Secor
923c3e5fb5 installer and config - name changes 2008-02-26 19:34:39 -07:00
Brian Warner
d96f90e1fb log more peerinfo in download/upload/checker problems 2008-02-26 17:33:14 -07:00
Brian Warner
301dd3d489 webish status: distinguish active uploads/downloads from recent ones 2008-02-26 15:35:28 -07:00
Brian Warner
d4bf623b87 current-downloads status: add SI, size, make numsegs 1-based 2008-02-26 15:02:35 -07:00
robk-tahoe
7f35743f85 confwiz: change smb service name to remove 'tahoe'
the name 'tahoe' is in the process of being removed from the windows
installer and binaries.  this changes the name of the smb service the 
confwiz tries to start to 'Allmydata SMB'
2008-02-21 18:40:04 -07:00
robk-tahoe
899d602722 mac: added 'mount filesystem' action to the mac gui
this adds an action to the dock menu and to the file menu (when visible)
"Mount Filesystem".  This action opens a windows offering the user an
opportunity to select from any of the named *.cap files in their 
.tahoe/private directory, and choose a corresponding mount point to mount
that at.

it launches the .app binary as a subprocess with the corresponding command
line arguments to launch the 'tahoe fuse' functionality to mount that file
system.  if a NAME.icns file is present in .tahoe/private alonside the
chosen NAME.cap, then that icon will be used when the filesystem is mounted.

this is highly unlikely to work when running from source, since it uses
introspection on sys.executable to find the relavent binary to launch in
order to get the right built .app's 'tahoe fuse' functionality.

it is also relatively likely that the code currently checked in, hence
linked into the build, will have as yet unresolved library dependencies.
it's quite unlikely to work on 10.5 with macfuse 1.3.1 at the moment.
2008-02-19 18:56:59 -07:00
robk-tahoe
2ae8a482aa macfuse: rework fuse initialisation, integrate with 'tahoe'
this provides a variety of changes to the macfuse 'tahoefuse' implementation.
most notably it extends the 'tahoe' command available through the mac build
to provide a 'fuse' subcommand, which invokes tahoefuse.  this addresses
various aspects of main(argv) handling, sys.argv manipulation to provide an
appropriate command line syntax that meshes with the fuse library's built-
in command line parsing.

this provides a "tahoe fuse [dir_cap_name] [fuse_options] mountpoint"
command, where dir_cap_name is an optional name of a .cap file to be found
in ~/.tahoe/private defaulting to the standard root_dir.cap. fuse_options
if given are passed into the fuse system as its normal command line options
and the mountpoint is checked for existence before launching fuse.

the tahoe 'fuse' command is provided as an additional_command to the tahoe
runner in the case that it's launched from the mac .app binary.

this also includes a tweak to the TFS class which incorporates the ctime
and mtime of files into the tahoe fs model, if available.
2008-02-19 17:16:08 -07:00
robk-tahoe
21f2d03203 runner: tweaked runner to make it easier to extend with additional subcommands
runner provides the main point of entry for the 'tahoe' command, and 
provides various subcommands by default. this provides a hook whereby
additional subcommands can be added in in other contexts, providing a
simple way to extend the (sub)commands space available through 'tahoe'
2008-02-19 17:05:14 -07:00
Brian Warner
92a6ab6e86 'tahoe start': only create logs/ if we're starting a tahoe node 2008-02-18 00:31:28 -07:00
Brian Warner
1af3bfb1d4 test_runner.py: test launching an introducer too 2008-02-18 00:28:56 -07:00
Brian Warner
6ff98a3c0b 'tahoe start': allow this to start arbitrary .tac file -bearing directories (like the log gatherer) 2008-02-18 00:28:17 -07:00
Zooko O'Whielacronx
b2f5ac9a0a Merge patch which switches to SHA-256d with patch that adds punctuation and capitalization to the comment about the hash value. 2008-02-15 13:16:43 -07:00
Brian Warner
c3a1491cf4 test_system.py: improve coverage of webish.py 2008-02-15 04:02:50 -07:00
Brian Warner
2f6fd7d000 webish.py: remove some dead code 2008-02-15 04:02:38 -07:00
robk-tahoe
d293240bfb confwiz: make opening the welcome page options, off by default on windows, on on mac 2008-02-15 00:11:23 -07:00
robk-tahoe
b101d9cbcf confwiz: fix mac confwiz w.r.t. recent confwiz changes 2008-02-14 20:14:46 -07:00
robk-tahoe
1def26c15d confwiz: update the config wiz to open the welcome page
regardless of platform, the confwiz now opens the welcoe page upon
writing a config.  it also provides a 'plat' argument (from python's
sys.platform) to help disambiguate our instructions by platform.
2008-02-14 20:12:58 -07:00
robk-tahoe
78c53b81ec confwiz: add command line options
adds command line option parsing to the confwiz.

the previous --uninstall option behaves as before, but it parsed
more explicitly with the twisted usage library.

added is a --server option, which controls which web site the
backend script for configuration is to be found on. (it is looked
for at /native_client.php on the given server) this option can be
used on conjunction with --uninstall to control where the uninstall
is recorded

Options:
  -u, --uninstall  record uninstall
  -s, --server=    url of server to contact 
                   [default: https://beta.allmydata.com/]

e.g. confwiz.py -s https://www-test.allmydata.com/
2008-02-14 19:44:29 -07:00
Brian Warner
72874390fe BIG COMPATIBILITY BREAK: update hash tags, switch to SHA-256d everywhere 2008-02-14 19:58:01 -07:00
Brian Warner
6d7417c0bf uri.py: hush pyflakes warning 2008-02-14 19:45:12 -07:00
Zooko O'Whielacronx
fc0d637523 docs: update install and usage docs, improve cli "usage" output, make new example directories, add unit test that fails code which prints out sentences that don't end with punctuation marks 2008-02-15 13:11:02 -07:00
Zooko O'Whielacronx
5942fca1e1 add unit test asserting that allmydata.util.base32 matches rfc 3548 2008-02-14 20:20:19 -07:00
Zooko O'Whielacronx
3eb95c1fad merge patch which adds base32 to test_util with patch which removes bencode from test_util 2008-02-14 19:35:32 -07:00
robk-tahoe
65ec397393 mac: fix a small bug in the 'tahoe' script 2008-02-14 17:36:10 -07:00
robk-tahoe
ca41693162 idlib: make failures much clearer when encountering unicode
while investigating fuse related stuff, I spent quite a while staring at
very cryptic explosions I got from idlib.  it turns out that unicode
objects and str objects have .translate() methods with differing signatures.
to save anyone else the headache, this makes it very clear if you accidentally
try to pass a unicode object in to a2b() etc.
2008-02-14 17:23:07 -07:00
Brian Warner
09bfa3bea2 remove bencode, yay 2008-02-14 18:06:41 -07:00
Brian Warner
7927495cbe unicode handling: declare dirnodes to contain unicode child names, update webish to match 2008-02-14 15:45:56 -07:00
Peter Secor
61edecd137 updating installer for beta release 2008-02-13 21:36:09 -07:00
Brian Warner
85eae2bf57 mutable.py: add comments to justify initial-read size choices 2008-02-13 17:41:20 -07:00
Zooko O'Whielacronx
7c6de95bc6 switch from base62 to base32 for storage indices, switch from z-base-32 to rfc 3548 base-32 for everything, separate out base32 encoding from idlib 2008-02-14 19:27:47 -07:00
Brian Warner
41045fba0f 'tahoe catalog-shares': add SDMF filesize to the output, update misc/find-share-anomalies.py to match 2008-02-13 15:12:06 -07:00
Brian Warner
a050204833 add test coverage for the /stats web page 2008-02-13 13:57:39 -07:00
Brian Warner
8c8bcb6d53 mutable.py: reject shares with different k/N than we expect. Quick fix for #312: avoids data corruption but has availability problems. 2008-02-13 13:34:20 -07:00
Brian Warner
871e7756f7 test_web: remove test_GET_DIRURL_large, it failed to exercise the problem in #237 and consumes a disproportionate amount of time 2008-02-13 13:08:26 -07:00
Brian Warner
124b2160b9 webish.py: fix for #237: when listing large directories, insert a turn break once every 100 children, to work around non-optimized tail recursion Deferreds 2008-02-12 21:28:52 -07:00
Zooko O'Whielacronx
e89edf8803 fix a few unused imports and suchlike, discovered by pyflakes 2008-02-13 07:38:08 -07:00
Brian Warner
55d30790bc webish: flogify the remaining log messages 2008-02-12 19:32:33 -07:00
Brian Warner
94348b7182 webish: censor all caps before logging the HTTP request, to preserve user privacy 2008-02-12 19:31:23 -07:00
Brian Warner
9795bcd9b7 download status: refactor into a separate object, so we don't need to keep the Download itself around for a long time 2008-02-12 19:01:03 -07:00
Brian Warner
a7867aeea2 introducer: remove encoding-parameter config, for now 2008-02-12 18:59:54 -07:00
Zooko O'Whielacronx
3f8df27063 use base62 encoding for storage indexes, on disk and in verifier caps, and in logging and diagnostic tools
base62 encoding fits more information into alphanumeric chars while avoiding the troublesome non-alphanumeric chars of base64 encoding.  In particular, this allows us to work around the ext3 "32,000 entries in a directory" limit while retaining the convenient property that the intermediate directory names are leading prefixes of the storage index file names.
2008-02-12 20:48:37 -07:00
Brian Warner
b17b7695a4 webish: add /status page to display current uploads/downloads 2008-02-12 15:40:05 -07:00
Brian Warner
e6af3b845c make current upload/download status objects available from the client 2008-02-12 15:39:45 -07:00
Brian Warner
94097affc3 add download-status objects, to track download progress 2008-02-12 15:38:39 -07:00
Brian Warner
d0ce8694c1 add upload-status objects, to track upload progress 2008-02-12 15:36:05 -07:00
Brian Warner
a70fba4ef1 webish: add edge metadata to t=json output, including timestamps 2008-02-11 19:14:10 -07:00
Brian Warner
1f7b980a51 catalog-shares: add expiration time to output 2008-02-11 18:44:54 -07:00
Brian Warner
ca27b8e5ad add 'tahoe catalog-shares' tool, to make a one-line summary of each share file. This can help do cross-server correlation of sharefiles, looking for anomalies 2008-02-11 18:17:01 -07:00
Brian Warner
5f50543c3b test_dirnode.py: improve error messages in case timestamp tests fail 2008-02-11 17:37:51 -07:00
Brian Warner
09cf1e2a8a test_dirnode.py: simplejson-1.7.1 incorrectly rounds floats to two decimal places. Don't let this bug flunk the timestamp test. 2008-02-11 17:35:17 -07:00
Brian Warner
7123c9d875 test_system.py: refactor bounce_client, probably make it stop failing on cygwin 2008-02-11 15:26:58 -07:00
Brian Warner
3d72d00826 webish: display timestamps 2008-02-11 15:13:18 -07:00
Brian Warner
3a1db45579 test_dirnode.py: assert that we update mtime and preserve ctime 2008-02-11 15:12:55 -07:00
Brian Warner
e6ddd9f3da dirnode.py: add metadata= to add_file(), add tests 2008-02-11 14:53:28 -07:00
Brian Warner
b90eaf75da test_dirnode.py: add diag output to test-ctime/mtime tests 2008-02-11 14:13:07 -07:00
Brian Warner
622c477e31 dirnode: add ctime/mtime to metadata, update metadata-modifying APIs. Needs more testing and sanity checking. 2008-02-08 18:43:47 -07:00
Brian Warner
873dee53e9 test_system: remove the hackish debug_interrupt= attribute magic used to exercise interrupted-upload resumption, instead just make the Uploadable bounce the helper halfway through the upload 2008-02-07 20:15:37 -07:00
Brian Warner
3bd79917b2 test_system.py: remove that ugly debug_stash_RemoteencryptedUploadable hack, now that UploadResults give us a better approach 2008-02-07 17:27:30 -07:00
Brian Warner
c7b10f4498 upload: if we lose the helper, go back to doing direct-to-server uploads instead of causing all subsequent uploads to fail 2008-02-07 17:26:59 -07:00
Brian Warner
b2d31f0a8a upload.EncryptAnUploadable: use 50KiB read chunks (instead of 50KB), to match the chunksize requested by the upload helper 2008-02-07 17:10:13 -07:00
Brian Warner
96ca6c2033 test_upload.py: hush pyflakes 2008-02-06 20:04:31 -07:00
Brian Warner
f78c80d7aa test_upload.py: add test to exercise CHK hashing variations 2008-02-06 20:03:35 -07:00
Brian Warner
02e7c56563 test_cli: oops, need to update this when the CHK hash changes 2008-02-06 19:58:53 -07:00
Brian Warner
da9610e90a change encryption-key hash to include encoding parameters. This is a minor compatibility break: CHK files encoded (with convergence) before and after this will have different keys and ciphertexts. Also switched to SHA-256d for both the data-to-key hash and the key-to-storageindex hash 2008-02-06 19:50:47 -07:00
Brian Warner
9f9a458249 hashutil: add tagged_hash_256d and tagged_hasher_256d 2008-02-06 19:36:43 -07:00
Brian Warner
81c5ceae16 upload: rework passing of default encoding parameters: move more responsibility into BaseUploadable 2008-02-06 18:39:03 -07:00
Brian Warner
75e4332462 offloaded: oops, need more tricks to make the unit tests pass 2008-02-06 17:51:11 -07:00
Brian Warner
a2cace9cfb helper: return full uri-extension data to the client, so it can compare encoding parameters 2008-02-06 17:30:58 -07:00
Brian Warner
6cd32c2f5c interfaces: remove spurious line that counted against the figleaf coverage 2008-02-06 16:41:26 -07:00
Brian Warner
d87bfa9eb2 test_util: add full coverage for allmydata.util.deferredutil 2008-02-06 16:41:04 -07:00
Brian Warner
d6fb0bf039 tahoe dump-share: remove --filename option, just take it from argv 2008-02-06 14:15:33 -07:00
Brian Warner
4d4073fb16 test_system: deferred-handling logic in test_upload_and_download was broken 2008-02-06 14:05:11 -07:00
Brian Warner
b4c9409138 dump-share: tweak formatting a little bit, to make dumping multiple shares in a row easier to read 2008-02-06 13:37:43 -07:00
Brian Warner
2dcac796e9 add 'tahoe find-shares' command, to locate share files on a local node's disk 2008-02-06 13:19:51 -07:00
Brian Warner
e92a2b5ab2 dump-cap: include UEB_hash in output 2008-02-06 12:48:19 -07:00
Brian Warner
40c2371e77 download.py: make logging safe in ValidatedBucket 2008-02-06 02:50:34 -07:00
Brian Warner
590b020a44 webish: more upload stats: total encode-and-push rate, already-in-grid existence check time 2008-02-06 02:39:01 -07:00
Brian Warner
6e0d3059a3 webish: add when_done= to POST /uri?t=upload . I did not add a 'recent uploads' section to the welcome page, but I think the new upload-results page provides the desired data 2008-02-06 02:38:16 -07:00
Brian Warner
652d50d7e0 UploadResults: add more helper timing stats (ciphertext fetch times) 2008-02-06 02:12:35 -07:00
Brian Warner
124fb5ecdf add upload-results timing info for helper uploads. This changes the Helper protocol, and introduces a compatibility break 2008-02-06 01:52:25 -07:00
Brian Warner
93d45abb02 add upload timings and rates to the POST /uri?t=upload results page 2008-02-06 00:41:51 -07:00
Brian Warner
1e4504463c webish: make POST /uri?t=upload deposit you on an 'Upload Results' page 2008-02-05 23:01:37 -07:00
Brian Warner
604d6d54ef webish.py: refactor /uri handlers, one rend.Page class per operation 2008-02-05 22:38:20 -07:00
Brian Warner
27f46f2aaf test_web.py: hush pyflakes 2008-02-05 22:37:51 -07:00
Brian Warner
23c2c8d660 webish: add PUT /uri?mutable=true 2008-02-05 22:18:02 -07:00
Brian Warner
e5dc9a8486 webish: add POST /uri?t=upload&mutable=true 2008-02-05 22:10:22 -07:00
Brian Warner
6afe50e2aa webish: add upload/view-uri forms (not associated with any particular directory) to the welcome page. Document POST /uri?t=upload . 2008-02-05 21:44:40 -07:00
Brian Warner
66f33ee504 upload: return an UploadResults instance (with .uri) instead of just a URI 2008-02-05 21:01:38 -07:00
Brian Warner
2f09b03bcc webish: add storage-consumed estimate on welcome page 2008-02-05 20:29:39 -07:00
Brian Warner
5103bf8148 storage: change service name from 'storageserver' to 'storage' 2008-02-05 20:28:59 -07:00
Brian Warner
4b4eba867b webish: display tahoe import path on the welcome page, to help figure out where the code is coming from 2008-02-05 20:08:49 -07:00
Brian Warner
315725926f refactor node startup, remove tub_ready() 2008-02-05 19:58:38 -07:00
Brian Warner
eb9023ab0e webish: condense display of nickname a little bit 2008-02-05 18:29:28 -07:00
Brian Warner
96e6c78c7a webish: show nickname too 2008-02-05 18:26:05 -07:00
Brian Warner
d146ef7e09 webish: add extra introducer data (version, timestamps) to Welcome page 2008-02-05 17:32:27 -07:00
Brian Warner
a7ea39e626 test_introducer.py: increase timeouts on poll() calls 2008-02-05 16:37:58 -07:00
Brian Warner
d98fde952c introducer: remove remaining bits of 'push-to-myself' flags. The uploading/downloading node is no longer special. 2008-02-05 14:16:01 -07:00
Brian Warner
80b72d919a introducer: remove PeerCountObserver, tests are managing with purely poll-for-connected approachers 2008-02-05 14:15:49 -07:00
Brian Warner
daecca6589 big introducer refactoring: separate publish+subscribe. Addresses #271. 2008-02-05 13:05:13 -07:00
Brian Warner
3a5ba35215 PollMixin: add timeout= argument, rewrite to avoid tail-recursion problems 2008-02-04 20:35:07 -07:00
robk-tahoe
f5a803303f stats: fix service issues
having moved inititalisation into startService to handle tub init cleanly,
I neglected the up-call to startService, which wound up not starting the
load_monitor.

also I changed the 'running' attribute to 'started' since 'running' is
the name used internally by MultiService itself.
2008-02-01 18:57:31 -07:00
Brian Warner
769446b667 client.py: hush pyflakes 2008-02-01 20:28:15 -07:00
Brian Warner
054f25581c client.py: touch BASEDIR/no_storage to not publish a storage server. Addresses #271 2008-02-01 20:07:08 -07:00
Brian Warner
a01f9ce9cc introducer: allow nodes to refrain from publishing themselves, by passing furl=None. This would be useful for clients who do not run storage servers. 2008-02-01 19:48:38 -07:00
Zooko O'Whielacronx
1d1628e525 rename storage_index_chk_hash() to storage_index_hash() and add TODO about how our use of it now includes keys that are not CHKs 2008-02-01 12:27:37 -07:00
robk-tahoe
e5487bbe21 stats: added IStatsProducer interface, fixed stats provider startup
this adds an interface, IStatsProducer, defining the get_stats() method
which the stats provider calls upon and registered producer, and made the
register_producer() method check that interface is implemented.

also refine the startup logic, so that the stats provider doesn't try and
connect out to the stats gatherer until after the node declares the tub
'ready'.  this is to address an issue whereby providers would attach to
the gatherer without providing a valid furl, and hence the gatherer would
be unable to determine the tubid of the connected client, leading to lost
samples.
2008-01-31 21:10:15 -07:00
robk-tahoe
0700ccabaa stats_gatherer: reject "<unauth>" as a tubid, to avoid screwing up the data. 2008-01-31 19:11:31 -07:00
Brian Warner
670933ecee storage: clean up use of si_s vs si_dir, add test for BadWriterEnabler message, add some logging 2008-01-31 17:48:48 -07:00
Zooko O'Whielacronx
7bf21082f7 remove unused import (thanks, pyflakes) 2008-01-31 17:00:59 -07:00
Zooko O'Whielacronx
79c439d026 storage: make two levels of share directories so as not to exceed certain filesystems's limitations on directory size
The filesystem which gets my vote for most undeservedly popular is ext3, and it has a hard limit of 32,000 entries in a directory.  Many other filesystems (even ones that I like more than I like ext3) have either hard limits or bad performance consequences or weird edge cases when you get too many entries in a single directory.

This patch makes it so that there is a layer of intermediate directories between the "shares" directory and the actual storage-index directory (the one whose name contains the entire storage index (z-base-32 encoded) and which contains one or more share files named by their share number).

The intermediate directories are named by the first 14 bits of the storage index, which means there are at most 16384 of them.  (This also means that the intermediate directory names are not a leading prefix of the storage-index directory names -- to do that would have required us to have intermediate directories limited to either 1024 (2-char), which is too few, or 32768 (3-chars of a full 5 bits each), which would overrun ext3's funny hard limit of 32,000.))

This closes #150, and please see the "convertshares.py" script attached to #150 to convert your old tahoe-0.7.0 storage/shares directory into a new tahoe-0.8.0 storage/shares directory.
2008-01-31 16:26:28 -07:00
Brian Warner
6b414074a9 offloaded.py: fix logging a bit 2008-01-31 13:45:01 -07:00
robk-tahoe
7b9f3207d0 stats: add a simple stats gathering system
We have a desire to collect runtime statistics from multiple nodes primarily
for server monitoring purposes.   This implements a simple implementation of
such a system, as a skeleton to build more sophistication upon.

Each client now looks for a 'stats_gatherer.furl' config file.  If it has
been configured to use a stats gatherer, then it instantiates internally
a StatsProvider.  This is a central place for code which wishes to offer
stats up for monitoring to report them to, either by calling 
stats_provider.count('stat.name', value) to increment a counter, or by
registering a class as a stats producer with sp.register_producer(obj).

The StatsProvider connects to the StatsGatherer server and provides its
provider upon startup.  The StatsGatherer is then responsible for polling
the attached providers periodically to retrieve the data provided.
The provider queries each registered producer when the gatherer queries
the provider.  Both the internal 'counters' and the queried 'stats' are
then reported to the gatherer.

This provides a simple gatherer app, (c.f. make stats-gatherer-run)
which prints its furl and listens for incoming connections.  Once a
minute, the gatherer polls all connected providers, and writes the
retrieved data into a pickle file.

Also included is a munin plugin which knows how to read the gatherer's
stats.pickle and output data munin can interpret.  this plugin, 
tahoe-stats.py can be symlinked as multiple different names within
munin's 'plugins' directory, and inspects argv to determine which
data to display, doing a lookup in a table within that file.
It looks in the environment for 'statsfile' to determine the path to
the gatherer's stats.pickle.  An example plugins-conf.d file is
provided.
2008-01-30 20:11:07 -07:00
Brian Warner
22071c00e0 upload: oops, fix breakage after removing upload_file/upload_data/etc 2008-01-30 19:41:43 -07:00
Brian Warner
909d848071 remove upload.upload_(data,filename,filehandle) convenience functions 2008-01-30 19:03:19 -07:00
Brian Warner
44ff4c6605 upload: Data should use convergence by default 2008-01-30 19:02:56 -07:00
Brian Warner
81eeafc574 upload-helper: avoid duplicate uploads: check the grid to see if the file already exists 2008-01-30 18:49:02 -07:00
Brian Warner
a1b155725f log.py: update log.err() to take advantage of current foolscap's log.err 2008-01-30 18:47:23 -07:00
robk-tahoe
7906d6d986 confwiz: update to record install and uninstall events. 2008-01-30 16:52:07 -07:00
Zooko O'Whielacronx
ca971559e6 make content-hash-key encryption a parameter of uploading
fixes #293
2008-01-30 12:24:50 -07:00
Zooko O'Whielacronx
424d338c82 tests: add a test that nevow can find its default css file 2008-01-30 11:41:58 -07:00
Brian Warner
492cb92dc8 speedcheck: track SSK creation time separately 2008-01-29 20:44:32 -07:00
Brian Warner
583cc34d2f webish: remove 'URI-link' from directory page, now that we only use URI-links 2008-01-29 18:11:09 -07:00
Brian Warner
d9d0920177 webish: link to directory URIs rather than a child path. Addresses #103. 2008-01-29 18:04:32 -07:00
Brian Warner
c2c922b5e9 upload: add log message when AssistedUploader is done 2008-01-29 17:38:12 -07:00
Brian Warner
c6c5a37d3f upload: fix 'skipping_ahead' log message 2008-01-28 19:13:36 -07:00
Brian Warner
e14dcb92e2 offloaded: when uploading a file that failed to upload before, ask for the last byte of ciphertext, so the reader is prepared to give us the plaintext hashes 2008-01-28 19:05:43 -07:00
Brian Warner
8063aa8b86 WriteBucketProxy: improve __repr__ 2008-01-28 18:53:51 -07:00
Brian Warner
aa3b509323 upload.py: the 'skipping encryption' message was emitted exactly backwards 2008-01-28 18:38:38 -07:00
robk-tahoe
b41749efa0 confwiz: revise layout
fix the make-confwiz-match-installer-size changes, to eliminate some weird
layout/rendering bugs.  also tweaked the layout slightly to add space between
the warning label and the newsletter subscribe checkbox.
2008-01-28 14:36:03 -07:00
robk-tahoe
6832fa52c0 tweak config wizard window size
adjust the confiwiz frames to display at a size comparable to the innosetup
installer window
2008-01-28 14:07:13 -07:00
Brian Warner
4c5518faef webish: upload+localdir=missing should give an error 2008-01-28 14:48:06 -07:00
Brian Warner
3b41c939f8 webish: oops, unit tests don't have an Uploader, don't rely upon it for helper-status display 2008-01-28 14:03:29 -07:00
Brian Warner
8485ff53fc display the Helper FURL and our connection status on the welcome page. Closes #285. 2008-01-28 13:56:22 -07:00
Brian Warner
69a0b5cc00 CHK upload helper: don't let one failed upload prevent us from trying again 2008-01-28 12:58:13 -07:00
Brian Warner
96d5455a53 macapp.py: cosmetic, remove trailing whitespace 2008-01-28 12:46:54 -07:00
Brian Warner
504bbe4a16 encode.py: update logging levels 2008-01-28 12:15:27 -07:00
Brian Warner
8f1212edac encode.py: don't allow a shareholder which dies in start() to kill the whole upload 2008-01-28 12:14:48 -07:00
Brian Warner
a36ed9b5b7 encode.py: don't record BAD log event unless there is actually a problem 2008-01-28 11:59:10 -07:00
robk-tahoe
0207dc85b9 confwiz: use get_config call to backend
this will write an arbitrary number of config files, instead of being restricted
to just the introducer.furl, based on the response of the php backend.  
the get_config is passed username/password
2008-01-25 19:01:32 -07:00
Brian Warner
09a99ce822 offloaded upload: avoid tail-recursion problem that would break large files 2008-01-24 21:51:34 -07:00
Brian Warner
081d27a65d encode.py: improve error message when segment lengths come out wrong 2008-01-24 21:51:09 -07:00
Brian Warner
46fe024612 offloaded uploader: don't use a huge amount of memory when skipping over previously-uploaded data 2008-01-24 17:25:33 -07:00
robk-tahoe
2f2de9df2e Reworked mac gui to not lock up upon launch
Previously, once the node itself was launched, the UI event loop was no longer
running.  This meant that the app would sit around seemingly 'wedged' and being
reported as 'Not Responding' by the os.

This chnages that by actually implementing a wxPython gui which is left running
while the reactor, and the node within it, is launched in another thread.
Beyond 'quit' -> reactor.stop, there are no interactions between the threads.

The ui provides 'open web root' and 'open account page' actions, both in the
file menu, and in the (right click) dock icon menu.


Something weird in the handling of wxpython's per-frame menubar stuff seems to
mean that the menu bar only displays the file menu and about etc (i.e. the items
from the wx menubar) if the focus changes from and back to the app while the 
frame the menubar belongs to is displayed.  Hence a splash frame comes up at
startup to provide an opportunity.

It also seems that, in the case that the file menu is not available, that one
can induce it to reappear by choosing 'about' from the dock menu, and then 
closing the about window.
2008-01-24 20:00:28 -07:00
robk-tahoe
5085c35002 cleanup mac and windows build code
this moves some of the code common to both windows and mac builds into the
allmydata module hierarchy, and cleans up the windows and mac build directories
to import the code from there.
2008-01-23 21:06:41 -07:00
Brian Warner
a0945de0e0 encode.py: log the contents of the uri_extension block 2008-01-23 18:08:04 -07:00
Brian Warner
1ff21d1d64 test_upload.py: implement remote_abort on our fake BucketWriter 2008-01-23 18:07:34 -07:00
robk-tahoe
6ef4606534 tweak webish to use resource_filename to find css and html files
using sibpath to find web template files relative to source code is functional
when running from source environments, but not especially flexible when running
from bundled built environments.  the more 'orthodox' mechanism, pkg_resources,
in theory at least, knows how to find resource files in various environments.

this makes the 'web' directory in allmydata into an actual allmydata.web module
(since pkg_resources looks for files relative to a named module, and that module
must be importable) and uses pkg_resources.resource_filename to find the files
therein.
2008-01-22 17:44:58 -07:00
Zooko O'Whielacronx
348eecd615 setup: require specific versions of dependencies, both at run-time (if pkg_resources is available) and at build-time, and make there be only once place where we specify those versions
Using pkg_resources.require() like this also apparently allows people to install multiple different versions of packages on their system and tahoe (if pkg_resources is available to it) will import the version of the package that it requires.  I haven't tested this feature.
2008-01-22 17:24:33 -07:00
Zooko O'Whielacronx
eaed7a0690 setup: use setuptools (if it is present) at run-time to give a specific error message on startup if a too-old version of a dependency is installed 2008-01-22 17:42:54 -07:00
robk-tahoe
d1de1f180a offloaded: reinstate fix for windows tests
in a discussion the other day, brian had asked me to try removing this fix, since
it leads to double-closing the reader.  since on my windows box, the test failures
I'd experienced were related to the ConnectionLost exception problem, and this
close didn't see to make a difference to test results, I agreed.

turns out that the buildbot's environment does fail without this fix, even with
the exception fix, as I'd kind of expected.

it makes sense, because the reader (specifically the file handle) must be closed
before it can be unlinked. at any rate, I'm reinstating this, in order to fix the
windows build
2008-01-21 15:25:15 -07:00
robk-tahoe
7b990cc9af UNDO: offloaded: close reader before removing its file
unlinking a file before closing it is not portable. it works on unix, but fails
since an open file holds a lock on windows.

this closes the reader before trying to unlink the encoding file within the 
CHKUploadHelper.
2008-01-17 17:36:28 -07:00
Zooko O'Whielacronx
84289b2446 setup: update some docs, metadata, and docstrings 2008-01-22 10:22:51 -07:00
robk-tahoe
7c34658438 offloaded: fix failure in unit test on windows
in trying to test my fix for the failure of the offloaded unit test on windows
(by closing the reader before unlinking the encoding file - which, perhaps
disturbingly doesn't actually make a difference in my windows environment)
I was unable too because the unit test failed every time with a connection lost
error.

after much more time than I'd like to admit it took, I eventually managed to
track that down to a part of the unit test which is supposed to be be dropping
a connection.   it looks like the exceptions that get thrown on unix, or at
least all the specific environments brian tested in, for that dropped 
connection are different from what is thrown on my box (which is running py2.4
and twisted 2.4.0, for reference)  adding ConnectionLost to the list of
expected exceptions makes the test pass.

though curiously still my test logs a NotEnoughWritersError error, and I'm not
currently able to fathom why that exception isn't leading to any overall 
failure of the unit test itself.

for general interest, a large part of the time spent trying to track this down
was lost to the state of logging.  I added a whole bunch of logging to try
and track down where the tests were failing, but then spent a bunch of time
searching in vain for that log output.  as far as I can tell at this point
the unit tests are themselves logging to foolscap's log module, but that isn't
being directed anywhere, so all the test's logging is being black holed.
2008-01-17 20:57:29 -07:00
robk-tahoe
46154beace offloaded: close reader before removing its file
unlinking a file before closing it is not portable. it works on unix, but fails
since an open file holds a lock on windows.

this closes the reader before trying to unlink the encoding file within the 
CHKUploadHelper.
2008-01-17 17:36:28 -07:00
Brian Warner
e9307d3fda offloaded: close the local filehandle after encoding is done, otherwise windows fails 2008-01-17 01:52:33 -07:00
Brian Warner
fd0dc3013c offloaded: update unit tests: assert that interrupt/resume works, and that the helper deletes tempfiles 2008-01-17 01:18:10 -07:00
Brian Warner
6b08c28f5d upload.py: make it easier to have an IUploadable that overrides encoding parameters: just set an attribute instead of subclassing 2008-01-17 01:17:42 -07:00
Brian Warner
812383a369 offloaded: upload.py: handle forward skips, to allow resumed uploads to send less than all the data. We still read all the data (to hash it, 'paranoid mode'), but we don't send it over the wire 2008-01-17 01:16:56 -07:00
Brian Warner
0e3b218e7d offloaded.py: delete encoding tempfile when upload is complete 2008-01-17 01:15:54 -07:00
Brian Warner
41cbd1e3a7 offloaded.py: when resuming, append new data to incoming file, rather than overwrite it. 2008-01-17 01:15:32 -07:00
Brian Warner
8386b0226b offloaded.py: remove dead/redundant code 2008-01-17 01:14:45 -07:00
Brian Warner
c597e67c2b offloaded: improve logging across the board 2008-01-17 01:11:35 -07:00
Brian Warner
51321944f0 megapatch: overhaul encoding_parameters handling: now it comes from the Uploadable, or the Client. Removed options= too. Also move helper towards resumability. 2008-01-16 03:03:35 -07:00
Brian Warner
547375a488 node.py: when calling os.abort(), announce it to stdout as well as the log 2008-01-16 03:01:32 -07:00
Brian Warner
4cdb252d5a cli scripts: remove the for-educational-purposes standalone clauses. Closes #261. 2008-01-16 00:08:51 -07:00
Brian Warner
f0430ccc48 offloaded: cleanup to handle multiple simultaneous uploaders gracefully 2008-01-14 22:20:03 -07:00
Brian Warner
7bb9307871 encode: actually define the UploadAborted exception 2008-01-14 21:27:02 -07:00
Brian Warner
821521cc3e test_storage: fix pyflakes warnings 2008-01-14 21:26:48 -07:00
Brian Warner
9f0ee4b758 test_system: fix pyflakes warnings 2008-01-14 21:26:28 -07:00
Brian Warner
168a8c3b73 offloaded: improve logging, pass through options, get ready for testing interrupted uploads. test_system: add (disabled) interrupted-upload test 2008-01-14 21:24:26 -07:00
Brian Warner
a6ca98ac53 upload: add Encoder.abort(), to abandon the upload in progress. Add some debug hooks to enable unit tests. 2008-01-14 21:22:55 -07:00
Brian Warner
60090fb9f2 upload: improve logging 2008-01-14 21:19:20 -07:00
Brian Warner
e65967da49 upload: pass options through to the encoder 2008-01-14 21:17:32 -07:00
Brian Warner
cb76ed36f9 logging: enable flogging in more places, replace Node.log with flogging 2008-01-14 21:16:58 -07:00
Brian Warner
f664dcb489 testutil.py: hush the new (more strict) pyflakes 2008-01-14 18:27:55 -07:00
Brian Warner
c24a1bbaaa iputil.py: hush the new (more strict) pyflakes 2008-01-14 18:27:43 -07:00
robk-tahoe
d87a80dca6 added is_uri() function to allmydata.uri 2008-01-10 20:43:42 -07:00
Brian Warner
7ac2b94aba remove wait_for_numpeers and the when_enough_peers call in mutable.Publish 2008-01-14 14:55:59 -07:00
Brian Warner
222718f13c test_GET_DIRURL_large: reduce from 400 to 200 children: the test fails to
fail anyways, and 200 ought to be enough to trigger the problem, so 400 is
overkill, and just wastes CPU.
2008-01-14 22:31:41 -07:00
Brian Warner
37b7f136ce 'tahoe dump-cap': accept http:// -prefixed URLs too 2008-01-14 14:12:27 -07:00
Brian Warner
6ca0efeef6 add 'tahoe dump-cap' command, to show storage index, lease secrets, etc 2008-01-14 13:43:25 -07:00
Brian Warner
76ee9cccfe storage: improve logging a bit 2008-01-14 11:58:58 -07:00
Zooko O'Whielacronx
676ded6a7e tests: put back skipped and todo tests
closes #258 -- "put back skipped and todo tests"
2008-01-14 21:02:41 -07:00
Brian Warner
964edadf44 offloaded: add a system test, make it pass. files are now being uploaded through the helper. 2008-01-11 05:42:55 -07:00
Brian Warner
08f9c3f2ab offloaded.py: hush pyflakes 2008-01-11 05:05:14 -07:00
Brian Warner
6ac01fde4c offloaded: more test coverage on client side, change interfaces a bit 2008-01-11 04:53:37 -07:00
Brian Warner
11179bb7d7 test_mutable.py: accomodate changes to mutable.py logging 2008-01-10 22:18:34 -07:00
Brian Warner
689c71f946 mutable.py: log more information during publish, specifically the sharemap, and the reason for an UncoordinatedWriteError 2008-01-10 22:16:23 -07:00
robk-tahoe
198f593cad fix dumb typo in tahoe run 2008-01-10 20:14:00 -07:00
robk-tahoe
0b097ac485 change default node-directory on windows to do registry lookup, not ~/.tahoe 2008-01-10 19:32:18 -07:00
robk-tahoe
fbf6c48ed8 move registry module into allmydata.windows package 2008-01-10 19:03:23 -07:00
robk-tahoe
9ed5533760 added tweaked sibpath implementation
use of twisted.python.util.sibpath to find files relative to modules doesn't
work when those modules are bundled into a library by py2exe.  this provides
an alternative implementation (in allmydata.util.sibpath) which checks for
the existence of the file, and if it is not found, attempts to find it relative
to sys.executable instead.
2008-01-10 15:23:41 -07:00
robk-tahoe
8f4f3bf6cc add 'run' command to tahoe
adds a 'run' commands to bin/tahoe / tahoe.exe
it loads a client node into the tahoe process itself,
running in the base dir specified by --basedir/-C and
defaulting to the current working dir.

it runs synchronously, and the tahoe process blocks until
the reactor is stopped.
2008-01-09 19:54:12 -07:00
robk-tahoe
08f445a562 added a 'repl' command to tahoe.exe
this is probably not of very high utility in the unix case of bin/tahoe
but is useful when working with native builds, e.g. py2exe's tahoe.exe,
to examine and debug the runtime environment, linking problems etc.
2008-01-09 19:19:52 -07:00
robk-tahoe
4e3f089257 tweak running to make node start/stop code optional
add a 'install_node_control' flag to runner.run(), default True
this enables the start/stop node commands
which are not too useful on windows
2008-01-08 19:51:18 -07:00
Zooko O'Whielacronx
69dba9a704 tests: increase the timeout on a test which failed on the overloaded virtual buildslaves 2008-01-11 14:27:54 -07:00
Brian Warner
e825406fc2 offloaded: move interfaces to interfaces.py, start implementing backend 2008-01-09 21:25:47 -07:00
Brian Warner
d2f4aff9c2 upload.py: start removing wait_for_numpeers code 2008-01-09 21:25:18 -07:00
Brian Warner
da7778774b offloaded: basic test for client-side of AssistedUploader 2008-01-09 20:25:50 -07:00
Brian Warner
2ad84eeed8 offloaded: create a Helper if 'run_helper' is non-empty 2008-01-09 20:25:05 -07:00
Brian Warner
0e2ddb00be test_system: slight refactoring to eventually make it easier to configure some nodes with the output of others 2008-01-09 20:23:54 -07:00