tahoe-lafs/tahoe-lafs.git
16 years ago#527: expire the cached files that are used to support Range: headers, every hour...
Brian Warner [Thu, 30 Oct 2008 20:39:09 +0000 (13:39 -0700)]
#527: expire the cached files that are used to support Range: headers, every hour, when the file is unused and older than an hour

16 years agoutil/cachedir.py: add a cache-directory manager class, which expires+deletes unused...
Brian Warner [Thu, 30 Oct 2008 20:01:20 +0000 (13:01 -0700)]
util/cachedir.py: add a cache-directory manager class, which expires+deletes unused files after a while

16 years agotest_cli: try to fix windows again
Brian Warner [Thu, 30 Oct 2008 19:32:04 +0000 (12:32 -0700)]
test_cli: try to fix windows again

16 years agodebug/test_cli: fix error handling for catalog-shares, to make the test stop failing...
Brian Warner [Thu, 30 Oct 2008 19:06:51 +0000 (12:06 -0700)]
debug/test_cli: fix error handling for catalog-shares, to make the test stop failing on windows

16 years agoweb: add 'Repair' button to checker results when they indicate unhealthyness. Also...
Brian Warner [Thu, 30 Oct 2008 01:09:17 +0000 (18:09 -0700)]
web: add 'Repair' button to checker results when they indicate unhealthyness. Also add the object's uri to the CheckerResults instance.

16 years agocreate_node.py: add 'web.static = public_html' to the initial tahoe.cfg
Brian Warner [Thu, 30 Oct 2008 00:13:36 +0000 (17:13 -0700)]
create_node.py: add 'web.static = public_html' to the initial tahoe.cfg

16 years agowebapi: serve the /static URL tree from /public_html (configurable)
Brian Warner [Wed, 29 Oct 2008 22:34:31 +0000 (15:34 -0700)]
webapi: serve the /static URL tree from /public_html (configurable)

16 years agocatalog-shares command: tolerate errors, log them to stderr, handle v2-immutable...
Brian Warner [Wed, 29 Oct 2008 22:10:10 +0000 (15:10 -0700)]
catalog-shares command: tolerate errors, log them to stderr, handle v2-immutable shares

16 years agotest_web.py: one more line of test coverage
Brian Warner [Wed, 29 Oct 2008 05:00:15 +0000 (22:00 -0700)]
test_web.py: one more line of test coverage

16 years agotest_web: improve test coverage of PUT DIRURL t=uri replace=false
Brian Warner [Wed, 29 Oct 2008 04:57:44 +0000 (21:57 -0700)]
test_web: improve test coverage of PUT DIRURL t=uri replace=false

16 years agoweb: test (and fix) PUT DIRURL t=uri, which replaces a directory in-place with some...
Brian Warner [Wed, 29 Oct 2008 04:54:46 +0000 (21:54 -0700)]
web: test (and fix) PUT DIRURL t=uri, which replaces a directory in-place with some other cap

16 years agoweb/directory.py: slight shuffle to improve test coverage
Brian Warner [Wed, 29 Oct 2008 04:54:06 +0000 (21:54 -0700)]
web/directory.py: slight shuffle to improve test coverage

16 years agotest_client.py: improve test coverage a bit
Brian Warner [Wed, 29 Oct 2008 04:43:35 +0000 (21:43 -0700)]
test_client.py: improve test coverage a bit

16 years agonode.py: remove unused old_log() function
Brian Warner [Wed, 29 Oct 2008 04:35:58 +0000 (21:35 -0700)]
node.py: remove unused old_log() function

16 years agonode.py: remove support for the old BASEDIR/authorized_keys.PORT file
Brian Warner [Wed, 29 Oct 2008 04:34:20 +0000 (21:34 -0700)]
node.py: remove support for the old BASEDIR/authorized_keys.PORT file

16 years agomove testutil into test/common_util.py, since it doesn't count as 'code under test...
Brian Warner [Wed, 29 Oct 2008 04:28:31 +0000 (21:28 -0700)]
move testutil into test/common_util.py, since it doesn't count as 'code under test' for our pyflakes numbers

16 years agoutil: move PollMixin to a separate file (pollmixin.py), so testutil can be moved...
Brian Warner [Wed, 29 Oct 2008 04:15:48 +0000 (21:15 -0700)]
util: move PollMixin to a separate file (pollmixin.py), so testutil can be moved into test/

16 years agocontrol.py: removed unused testutil.PollMixin
Brian Warner [Wed, 29 Oct 2008 04:03:59 +0000 (21:03 -0700)]
control.py: removed unused testutil.PollMixin

16 years agoweb/filenode: oops, fix test failures, not everything has a storage index
Brian Warner [Wed, 29 Oct 2008 01:17:20 +0000 (18:17 -0700)]
web/filenode: oops, fix test failures, not everything has a storage index

16 years agoweb/filenode: add Accept-Ranges and ETag (for immutable files) headers to GET responses
Brian Warner [Wed, 29 Oct 2008 01:01:03 +0000 (18:01 -0700)]
web/filenode: add Accept-Ranges and ETag (for immutable files) headers to GET responses

16 years ago#527: respond to GETs with early ranges quickly, without waiting for the whole file...
Brian Warner [Wed, 29 Oct 2008 00:56:18 +0000 (17:56 -0700)]
#527: respond to GETs with early ranges quickly, without waiting for the whole file to download. Fixes the alacrity problems with the earlier code. Still needs cache expiration.

16 years ago#527: support HTTP 'Range:' requests, using a cachefile. Adds filenode.read(consumer...
Brian Warner [Tue, 28 Oct 2008 20:41:04 +0000 (13:41 -0700)]
#527: support HTTP 'Range:' requests, using a cachefile. Adds filenode.read(consumer, offset, size) method. Still needs: cache expiration, reduced alacrity.

16 years agoiputil.py: avoid a DNS lookup at startup (which may timeout tests when run on a parti...
Brian Warner [Tue, 28 Oct 2008 20:36:46 +0000 (13:36 -0700)]
iputil.py: avoid a DNS lookup at startup (which may timeout tests when run on a partially-offline host) by using 198.41.0.4 instead of A.ROOT-SERVERS.NET

16 years agointerfaces.py: promote immutable.encode.NotEnoughSharesError.. it isn't just for...
Brian Warner [Mon, 27 Oct 2008 20:34:49 +0000 (13:34 -0700)]
interfaces.py: promote immutable.encode.NotEnoughSharesError.. it isn't just for immutable files any more

16 years agointerfaces.IMutableFileNode.download_best_version(): fix return value
Brian Warner [Mon, 27 Oct 2008 20:20:46 +0000 (13:20 -0700)]
interfaces.IMutableFileNode.download_best_version(): fix return value

16 years agodirnode lookup: use distinct NoSuchChildError instead of the generic KeyError when...
Brian Warner [Mon, 27 Oct 2008 20:15:25 +0000 (13:15 -0700)]
dirnode lookup: use distinct NoSuchChildError instead of the generic KeyError when a child can't be found

16 years agostorage: don't use colons in the corruption-advisory filename, since windows can...
Brian Warner [Sun, 26 Oct 2008 02:46:33 +0000 (19:46 -0700)]
storage: don't use colons in the corruption-advisory filename, since windows can't tolerate them

16 years agomutable: call remove_advise_corrupt_share when we see share corruption in mapupdate...
Brian Warner [Fri, 24 Oct 2008 20:21:28 +0000 (13:21 -0700)]
mutable: call remove_advise_corrupt_share when we see share corruption in mapupdate/download/check, tolerate servers that do not implement it

16 years agostorage: add remote_advise_corrupt_share, for clients to tell storage servers about...
Brian Warner [Fri, 24 Oct 2008 18:52:48 +0000 (11:52 -0700)]
storage: add remote_advise_corrupt_share, for clients to tell storage servers about share corruption that they've discovered. The server logs the report.

16 years agomutable/servermap.py: fix needs_merge(), it was incorrectly claiming that mixed share...
Brian Warner [Fri, 24 Oct 2008 04:00:24 +0000 (21:00 -0700)]
mutable/servermap.py: fix needs_merge(), it was incorrectly claiming that mixed shares with distinct seqnums needed a merge, causing repair(force=False) to fail

16 years agotest_web.test_POST_DIRURL_deepcheck: confirm that /operations/HANDLE/ works with...
Brian Warner [Fri, 24 Oct 2008 02:17:59 +0000 (19:17 -0700)]
test_web.test_POST_DIRURL_deepcheck: confirm that /operations/HANDLE/ works with or without the slash

16 years agoweb/checker_results.py: remove dead code
Brian Warner [Fri, 24 Oct 2008 00:17:17 +0000 (17:17 -0700)]
web/checker_results.py: remove dead code

16 years agotest_web: more test coverage
Brian Warner [Fri, 24 Oct 2008 00:11:18 +0000 (17:11 -0700)]
test_web: more test coverage

16 years agowebapi: fix t=rename from==to, it used to delete the file
Brian Warner [Thu, 23 Oct 2008 23:32:36 +0000 (16:32 -0700)]
webapi: fix t=rename from==to, it used to delete the file

16 years agotest_system: update test to match web checker results
Brian Warner [Thu, 23 Oct 2008 23:32:02 +0000 (16:32 -0700)]
test_system: update test to match web checker results

16 years agowebapi deep-check: show the root as <root>, rather than an empty path string
Brian Warner [Thu, 23 Oct 2008 23:03:59 +0000 (16:03 -0700)]
webapi deep-check: show the root as <root>, rather than an empty path string

16 years agomutable/checker: announce the mapupdate op on the 'recent uploads+downloads' page
Brian Warner [Thu, 23 Oct 2008 23:03:19 +0000 (16:03 -0700)]
mutable/checker: announce the mapupdate op on the 'recent uploads+downloads' page

16 years agoscripts/create_node.py: remove empty-string defaults for --introducer= and --nickname=
Brian Warner [Thu, 23 Oct 2008 23:02:35 +0000 (16:02 -0700)]
scripts/create_node.py: remove empty-string defaults for --introducer= and --nickname=

16 years agodeep-check: add webapi links to detailed per-file/dir results
Brian Warner [Thu, 23 Oct 2008 23:00:31 +0000 (16:00 -0700)]
deep-check: add webapi links to detailed per-file/dir results

16 years agointerface.py: fix typo
Brian Warner [Thu, 23 Oct 2008 22:59:36 +0000 (15:59 -0700)]
interface.py: fix typo

16 years agowebapi: make the /operations/ 't=status' qualifier optional, remove it from examples
Brian Warner [Thu, 23 Oct 2008 22:56:58 +0000 (15:56 -0700)]
webapi: make the /operations/ 't=status' qualifier optional, remove it from examples

16 years agosetup: require the latest version of the setuptools bootstrap egg
Zooko O'Whielacronx [Sat, 25 Oct 2008 15:28:58 +0000 (08:28 -0700)]
setup: require the latest version of the setuptools bootstrap egg

16 years agosetup: include _pkgutil.py in setuptools bootstrap egg so that it will work on Python 2.4
Zooko O'Whielacronx [Sat, 25 Oct 2008 15:28:39 +0000 (08:28 -0700)]
setup: include _pkgutil.py in setuptools bootstrap egg so that it will work on Python 2.4

16 years agosetup: pretend the tahoe requires twisted to set up, so that twisted will be there...
Zooko O'Whielacronx [Sat, 25 Oct 2008 13:50:42 +0000 (06:50 -0700)]
setup: pretend the tahoe requires twisted to set up, so that twisted will be there for nevow

16 years agosetup: require the SVN snapshot of setuptools to build
Zooko O'Whielacronx [Sat, 25 Oct 2008 13:49:59 +0000 (06:49 -0700)]
setup: require the SVN snapshot of setuptools to build

16 years agosetup: remove old bundled setuptools-0.6c9
Zooko O'Whielacronx [Sat, 25 Oct 2008 13:49:47 +0000 (06:49 -0700)]
setup: remove old bundled setuptools-0.6c9

16 years agosetup: bundle an SVN snapshot of setuptools instead of the most recent stable release...
Zooko O'Whielacronx [Sat, 25 Oct 2008 13:48:37 +0000 (06:48 -0700)]
setup: bundle an SVN snapshot of setuptools instead of the most recent stable release of setuptools
This SVN snapshot fixes a problem that prevents the setting up of nevow:
http://bugs.python.org/setuptools/issue20

16 years agosetup: reorder dependencies to be sort of increasing order of how much they depend...
Zooko O'Whielacronx [Sat, 25 Oct 2008 13:47:39 +0000 (06:47 -0700)]
setup: reorder dependencies to be sort of increasing order of how much they depend on other stuff
Not that the order makes any different to how it gets installed, as far as I can tell.

16 years agodocs: add a note that when you make a new tahoe release, you should send the announce...
Zooko O'Whielacronx [Thu, 23 Oct 2008 21:36:58 +0000 (14:36 -0700)]
docs: add a note that when you make a new tahoe release, you should send the announcement to fuse-devel@lists.sourceforge.net

16 years agoweb/info.py: fix 'Check This Object' link, for files it was checking the parent direc...
Brian Warner [Wed, 22 Oct 2008 17:10:56 +0000 (10:10 -0700)]
web/info.py: fix 'Check This Object' link, for files it was checking the parent directory by mistake

16 years ago#514: add meta-refresh=60 tag to t=status page for incomplete operations
Brian Warner [Wed, 22 Oct 2008 16:48:42 +0000 (09:48 -0700)]
#514: add meta-refresh=60 tag to t=status page for incomplete operations

16 years agotest_dirnode.py: oops, missed a Monitor(), unbreak tests
Brian Warner [Wed, 22 Oct 2008 08:50:54 +0000 (01:50 -0700)]
test_dirnode.py: oops, missed a Monitor(), unbreak tests

16 years agoimmutable/filenode.py: add TODO note about the #514 monitor to check(), rather than...
Brian Warner [Wed, 22 Oct 2008 08:42:37 +0000 (01:42 -0700)]
immutable/filenode.py: add TODO note about the #514 monitor to check(), rather than going through the checker/verifier code and adding it, since Zooko is currently working on that code

16 years agomore #514: pass a Monitor to all checker operations, make mutable-checker honor the...
Brian Warner [Wed, 22 Oct 2008 08:38:18 +0000 (01:38 -0700)]
more #514: pass a Monitor to all checker operations, make mutable-checker honor the cancel flag

16 years agodirnode.py: check for cancel during deep-traverse operations, and don't initiate...
Brian Warner [Wed, 22 Oct 2008 07:55:52 +0000 (00:55 -0700)]
dirnode.py: check for cancel during deep-traverse operations, and don't initiate any new ones if we've been cancelled. Gets us closer to #514.

16 years agomore #514 log-webop status/cancel: add handle-expiration, test coverage
Brian Warner [Wed, 22 Oct 2008 05:13:54 +0000 (22:13 -0700)]
more #514 log-webop status/cancel: add handle-expiration, test coverage

16 years agowebapi.txt: improve t=deep-size output docs
Brian Warner [Wed, 22 Oct 2008 00:53:31 +0000 (17:53 -0700)]
webapi.txt: improve t=deep-size output docs

16 years ago#514: improve test coverage
Brian Warner [Wed, 22 Oct 2008 00:52:56 +0000 (17:52 -0700)]
#514: improve test coverage

16 years agoChange deep-size/stats/check/manifest to a start+poll model instead of a single long...
Brian Warner [Wed, 22 Oct 2008 00:03:07 +0000 (17:03 -0700)]
Change deep-size/stats/check/manifest to a start+poll model instead of a single long-running synchronous operation. No cancel or handle-expiration yet. #514.

16 years agosetup: change ez_setup.py to install setuptools-0.6c9
Zooko O'Whielacronx [Tue, 30 Sep 2008 20:05:02 +0000 (13:05 -0700)]
setup: change ez_setup.py to install setuptools-0.6c9

16 years agosetup: bundle setuptools-0.6c9
Zooko O'Whielacronx [Tue, 30 Sep 2008 20:04:48 +0000 (13:04 -0700)]
setup: bundle setuptools-0.6c9

16 years agosetup: remove bundled setuptools-0.6c8
Zooko O'Whielacronx [Tue, 30 Sep 2008 20:03:36 +0000 (13:03 -0700)]
setup: remove bundled setuptools-0.6c8

16 years agosetup: remove the developer note about doing without GNU make (the GNU make requireme...
Zooko O'Whielacronx [Tue, 21 Oct 2008 16:32:00 +0000 (09:32 -0700)]
setup: remove the developer note about doing without GNU make (the GNU make requirement is about to hurt Peter if he tries to follow this doc, by the way)
add classifiers showing with which versions of Python it is known to work.

16 years ago* fuse/runtests: added --catch-up-pause option
robk-tahoe [Tue, 21 Oct 2008 00:29:02 +0000 (17:29 -0700)]
* fuse/runtests: added --catch-up-pause option

On linux, write tests are failing because data written to fuse isn't showing
up in tahoe by the time it's checked.  it's not clear where this is originating,
since the fuse implementation [should be] waiting for completion of tahoe
operations before returning from its calls.  This adds an option to control the
duration of a pause between the fuse write and the check of tahoe, which is by
default set to 2s on linux, which - somewhat inexplicably - seems to 'fix' the
problem, in as far as it allows tests to complete.

16 years agofuse/runtests: include length in drepr() output
robk-tahoe [Tue, 21 Oct 2008 00:01:59 +0000 (17:01 -0700)]
fuse/runtests: include length in drepr() output

16 years agofuse/runtests: make exceptions in 'read_in_random_order' into TestFailures
robk-tahoe [Mon, 20 Oct 2008 23:52:35 +0000 (16:52 -0700)]
fuse/runtests: make exceptions in 'read_in_random_order' into TestFailures

16 years agofuse/blackmatch: added asynchronous (background) file download
robk-tahoe [Mon, 20 Oct 2008 23:33:33 +0000 (16:33 -0700)]
fuse/blackmatch: added asynchronous (background) file download

previously, upon opening a file for reading, the open() call would block
while the entire file was retrieved from tahoe into the cache directory.
This change adds a DownloaderWithReadQueue class, and associated plumbing,
such that an open() will return promptly with the download initiated 'in
the background'.  Subsequent read() operations will block until enough
data has been downloaded to satisfy that request.  This provides a behaviour
similar to streaming, i.e. the client application will be able to read
data from the fuse interface while the remainder of the file is still being
downloaded.

16 years agofuse/runtests: added 'read_in_random_order' test
robk-tahoe [Mon, 20 Oct 2008 23:24:27 +0000 (16:24 -0700)]
fuse/runtests: added 'read_in_random_order' test

this test uploads a test file to tahoe, and then reads the file from fuse,
but reads the blocks of the file in a random order; this is designed to
exercise the asynchronous download feature of blackmatch - where the file
is downloaded from tahoe asynchronously, and rather than blocking open()
for the entirety of the download, instead individual read() calls are
blocked until enough of the file has been downloaded to satisfy them

16 years agofuse/runtests: added a --no-cleanup option
robk-tahoe [Mon, 20 Oct 2008 15:51:20 +0000 (08:51 -0700)]
fuse/runtests: added a --no-cleanup option

the code had a 'fullcleanup' flag internally which controlled whether
working directories were cleaned up.  this promotes that to a command
line option (negated) '--no-cleanup' defaulting to False, i.e. do cleanup

16 years agofuse/runtests: truncate expected file contents in reported error message
robk-tahoe [Mon, 20 Oct 2008 14:45:23 +0000 (07:45 -0700)]
fuse/runtests: truncate expected file contents in reported error message

this avoids dumping the repr of 1Mb of random data to stdout in the event
of a test failure, but rather just dumps the start/end of the errant strings
if the amount of data is > 200 chars repr'd

16 years agofuse/blackmatch: fix platform specific problems in repr_flags
robk-tahoe [Mon, 20 Oct 2008 14:30:52 +0000 (07:30 -0700)]
fuse/blackmatch: fix platform specific problems in repr_flags

the repr_flags debug/logging function had a list of fields from the os
module that might be passed into an open() call, but it included at
least one which was available on the mac but not on linux. symmetrically
linux has numerous flags which are not present on the mac. the repr_flags
function is now tolerant of flags not being present, and has an expanded
list of flags

16 years agomakefile: added 'fuse-test' target to makefile, to run 'runtests'
robk-tahoe [Sun, 19 Oct 2008 13:25:18 +0000 (06:25 -0700)]
makefile: added 'fuse-test' target to makefile, to run 'runtests'

16 years agofuse/runtests: added a 'todo' flag, surpressing failure for implementations not expec...
robk-tahoe [Sun, 19 Oct 2008 13:16:00 +0000 (06:16 -0700)]
fuse/runtests: added a 'todo' flag, surpressing failure for implementations not expected to pass

since the current tests assume that the implementation responds to changes made
to tahoe after mount, and impl_b prefetches and cached directory data, impl_b
fails the current 'read' test suite.

rather than reflect that problem in the overall failure of the runtests exit
code, this adds a 'todo' flag to the implementations table, and sets the todo
flag for impl_b.  Thus errors will therein be reported in output, but not cause
a failing exit code.

16 years agofuse/runtests: made runtests exit code depend on success
robk-tahoe [Fri, 17 Oct 2008 18:00:58 +0000 (11:00 -0700)]
fuse/runtests: made runtests exit code depend on success

return an exit code of 0 only if no tests failed, and 1 in the case of
linkage error, test setup failure, or individual test case failure

16 years agostorage.py: assert that immutable share size will fit in the 4-byte v1 container...
Brian Warner [Mon, 20 Oct 2008 17:22:08 +0000 (10:22 -0700)]
storage.py: assert that immutable share size will fit in the 4-byte v1 container (see #346). The struct module in py2.4 raises an error on overflow, but py2.5 merely emits a warning

16 years agoNEWS: update to summarize all changes since the last update
Brian Warner [Mon, 20 Oct 2008 16:40:47 +0000 (09:40 -0700)]
NEWS: update to summarize all changes since the last update

16 years agofuse/runtest: make removal of webport file soft
robk-tahoe [Fri, 17 Oct 2008 03:01:54 +0000 (20:01 -0700)]
fuse/runtest: make removal of webport file soft

previously the runtests suite removed the webport file created by
tahoe create-client in all but the first node.  now that the node config
is in tahoe.cfg by default this file might not exist.

16 years agofuse/blackmatch: update json handling to support simplejson v2
robk-tahoe [Fri, 17 Oct 2008 02:59:31 +0000 (19:59 -0700)]
fuse/blackmatch: update json handling to support simplejson v2

simplejson v2 returns strings as either unicode or str, depending upon its
mood.  thus the interpretation of the node's json repr of a directory, and
the serialisation of strings in the json based rpc both exploded when built
against simplejson v2.  this makes both of these places liberal in their
acceptance of either str or unicode.

16 years agofuse/blackmatch: log exception in server startup
robk-tahoe [Fri, 17 Oct 2008 01:46:50 +0000 (18:46 -0700)]
fuse/blackmatch: log exception in server startup

humphf.  my build runs the fuse stuff fine, but the build from the buildslave
doesn't seem to start up properly.  hopefully this will elicit some useful info

16 years agofuse/blackmatch: add readability to some logging, fix a permissions problem
robk-tahoe [Fri, 17 Oct 2008 00:44:21 +0000 (17:44 -0700)]
fuse/blackmatch: add readability to some logging, fix a permissions problem

adds a couple of functions to unpack 'mode' and 'flags' for open() calls, to
facilitate debugging.

adds a fix to ensure that all tmp files created for writing are opened with
permissions 0600 - one problem I had with testing with the Finder was that
files were being opened write only (0200) and were then failing to upload
to tahoe due to internal permission denied errors.

there remain a variety of problems with finder access which I'm unable to
comprehend at this time.  sometimes copies to tahoe will work fine, sometimes
they yield "the finder cannot complete the operation because some data ...
could not be read or written. (Error code -36)" sometimes "You may need to
enter the name and password for an administrator on this computer to change
the item" sometimes "The operation cannot be completed because an item with
the name ... already exists." and sometimes "The operation cannot be completed
because the item ... is locked."  What seems to be absent is rhyme or reason.

unix operations (cp, mv) work fine, rsync works fine.

16 years agofuse/blackmatch: fix linkage problems with daemonize
robk-tahoe [Thu, 16 Oct 2008 16:36:37 +0000 (09:36 -0700)]
fuse/blackmatch: fix linkage problems with daemonize

the daemonize() function imported from twisted was causing problems when
run from a frozen (py2app) build.  I simply copied the daemonize function
into this file, and that fixes the problem.

also removed a couple of lines of debugging spam that slipped through.

16 years agogui/macapp: minor bugfixes
robk-tahoe [Thu, 16 Oct 2008 16:30:52 +0000 (09:30 -0700)]
gui/macapp: minor bugfixes

though it seemed to work before the 'fstype' passed to fuse of 'allmydata' was
today throwing errors that len(fstype) must be at most 7.

fixed a typo in changes to 'mount_filesystem()' args

bumped the delay between mounting a filesystem and 'open'ing it in Finder to
4s, as it seems to take a little longer to mount now the client and server
fuse processes need to coordinate.

16 years agofuse/blackmatch: split into client/server (twisted server)
robk-tahoe [Thu, 16 Oct 2008 15:08:46 +0000 (08:08 -0700)]
fuse/blackmatch: split into client/server (twisted server)

This implements a client/server split for blackmatch, where the client
implements the fuse_main bindings and a simple blocking rpc client mechanism.
The server implements the other half of that rpc mechanism, and contains all
the actual logic for interpreting fuse requests in the context of the on disk
cache and requests to the tahoe node.  The server is based on a twisted reactor.

The rpc mechanism implements a simple method dispatch including marshalling,
using json, of basic inert data types, in a flat namespace (no objects).
The client side is written in a blocking idiom, to interface with the threading
model used by the fuse_main bindings, whereas the server side is written for a
twisted reactor-based environment, intended to facilitate implementing more
sophisticated logic in that paradigm.  The two communicate over a unix domain
socket, allocated within the nodedir.

Command line usage is unchanged; the server is launched automatically by the
client. The server daemonizes itself, to avoid preventing the original parent
process (e.g. 'runtests') from waiting upon the server exiting.

The client keeps open a 'keepalive' connection to the server; upon loss thereof
the server will exit. This addresses the fact that the python-fuse bindings
provide no notification of exit of the client process upon unmount.

The client thus provides a relatively thin 'shim' proxying requests from the
fuse_main bindings across the rpc to the server process, which handles the
logic behind each request.

For the time being, a '--no-split' option is provided to surpress the splitting
into client/server, yielding the prior behaviour.  Once the server logic gets
more complex and more entrenched in a twisted idiom, this might be removed.
The 'runtests' test harness currently tests both modes, as 'impl_c' and
'impl_c_no_split'

16 years agofuse/blackmatch: 'flatten' the fuse api implementation
robk-tahoe [Thu, 16 Oct 2008 14:35:47 +0000 (07:35 -0700)]
fuse/blackmatch: 'flatten' the fuse api implementation

the previous revision of blackmatch used a file_class to delegate all fuse
api operations on files to a specific per-file class, which is an option
given by the python-fuse bindings.

this is a pre-cursor to the 'split' client/server version, which uses a
simple, moreover flat, rpc mechanism to broker access to methods.

16 years agofuse/runtests: disable impl_a/impl_b on mac, as they don't actually work.
robk-tahoe [Thu, 16 Oct 2008 14:32:32 +0000 (07:32 -0700)]
fuse/runtests: disable impl_a/impl_b on mac, as they don't actually work.

16 years agofuse/runtests: added write_partial_overwrite test
robk-tahoe [Thu, 16 Oct 2008 14:29:26 +0000 (07:29 -0700)]
fuse/runtests: added write_partial_overwrite test

this tests opening a file for update, overwriting a small part of it, and
ensuring that the end result constitutes an overwrite of the original file.
This tests, e.g. the implementation doesn' open a 'fresh' file but does in
fact initialise the file to be uploaded with the contents of any extant
file before applying updates

16 years agofuse/runtests: added --tests, renamed --suites
robk-tahoe [Thu, 16 Oct 2008 14:28:36 +0000 (07:28 -0700)]
fuse/runtests: added --tests, renamed --suites

changed the --tests option to be --suites, as it takes a prefix, e.g. 'read'
'write' (or 'all', the default) and runs those suites which are applicable to
each implementation being tested.

added a --tests option, which takes a list of tests, e.g. 'read_file_contents'
'write_overlapping_large_writes' and runs all tests specified without regard
to whether the implementation(s) under test are declared to support them.

this is basically to allow a specific test or two to be run, saving time
during development and debugging by not running the entire suite

16 years agofuse/runtests: added 'random scatter' write test
robk-tahoe [Fri, 3 Oct 2008 23:34:36 +0000 (16:34 -0700)]
fuse/runtests: added 'random scatter' write test

this writes the test file in a randomised order, with randomly sized writes.
also for each 'slice' of the file written, a randomly chosen overlapping
write is also made to the file.  this ensures that the file will be written
in its entirety in a thoroughly random order, with many overlapping writes.

16 years agofuse/runtests: add overlapping write tests
robk-tahoe [Fri, 3 Oct 2008 22:48:33 +0000 (15:48 -0700)]
fuse/runtests: add overlapping write tests

using both small and large blocksizes for writes, write a 1Mb file to fuse
where every write overlaps another.

This serves a useful purpose - in manual testing of blackmatch some time ago
most operations e.g. bulk copies, worked fine, but using rsync caused data
corruption on most files.  it turned out to be that rsync writes in 64K blocks,
but rather than making the last block short, the last block instead overlaps
the preceding (already written) block.  This revealed a problem where cache
files were being opened 'append' rather than 'write' and hence the overlapping
write to the fuse layer caused the overlapping portion of the file to be
duplicated in cache, leading to oversized and corrupt files being uploaded.

16 years agofuse/runtests: remove write small file test, as it's subsumed by the tiny_file test
robk-tahoe [Fri, 3 Oct 2008 22:39:44 +0000 (15:39 -0700)]
fuse/runtests: remove write small file test, as it's subsumed by the tiny_file test

16 years agofuse/runtests: added linear write tests for various block sizes
robk-tahoe [Fri, 3 Oct 2008 22:35:50 +0000 (15:35 -0700)]
fuse/runtests: added linear write tests for various block sizes

unit tests to test writing contiguous blocks linearly through the file,
for a variety of block sizes;  'tiny_file' is an entire file fitting within
a single io block / write operation.  'linear_{small,large}_writes' test
a 1Mb file written with each write operation containing significantly less
or more, respecitvely, data than fuse will pass into the implementation as
a single operation (which on the mac at least is 64Kib)

16 years agofuse/runtests: add a very simple 'write' test
robk-tahoe [Fri, 3 Oct 2008 17:20:44 +0000 (10:20 -0700)]
fuse/runtests: add a very simple 'write' test

this performs a very simple write through the fuse layer and confirms that
the file is stored correctly into the tahoe mesh.  ('simple' in the sense
that the entire file body fits trivially in a single write() operation,
disk block etc)

16 years agofuse/runtests: added a --web-open option
robk-tahoe [Fri, 3 Oct 2008 17:20:26 +0000 (10:20 -0700)]
fuse/runtests: added a --web-open option

similar to the --debug-wait option which causes the test harness to
pause at various stages of the process to facilitate debugging, this
option simplifies that debugging by automatically opening a web browser
to the root dir of that implementation's tests when tests are commenced.

in addition, if --web-open is specfied but --debug-wait is not, the
harness will still pause after running tests but before tearing down
the tahoe grid - this allows all tests to run to completion, but
provide a debugging hook to investigate the end state of the grid's
contents thereafter.

16 years agofuse/impl_a: fix a suspected bug in caching
robk-tahoe [Fri, 3 Oct 2008 17:13:09 +0000 (10:13 -0700)]
fuse/impl_a: fix a suspected bug in caching

from my examination of the tahoe_fuse ('impl_a') code, it looks like
the intention is to cache the file contents in memory while it's open,
since it does in fact do that.  however it looks like it also ignored
that cache entirely, and made an individual tahoe webapi GET request
for each and every read() operation regardless of the relative size of
the read block and the file in question.

this changes that to make read() use the data in memory rather than
fetch the data over again.   if there's something more subtle going
on, please let me know.

16 years agogui/macapp: slew of code cleanup; unmount filesystems on quit
robk-tahoe [Thu, 25 Sep 2008 23:32:35 +0000 (16:32 -0700)]
gui/macapp: slew of code cleanup; unmount filesystems on quit

a handful of code cleanup, renaming and refactoring.  basically consolidating
'application logic' (mount/unmount fs) into the 'MacGuiApp' class (the wx.App)
and cleaning up various scoping things around that.  renamed all references to
'app' to refer more clearly to the 'AppContainer' or to the guiapp.

globally renamed basedir -> nodedir

also made the guiapp keep a note of each filesystem it mounts, and unmount
them upon 'quit' so as to cleanup the user's environment before the tahoe node
vanishes from out underneath the orphaned tahoe fuse processes

16 years agogui/macapp: make submenu of aliases for 'webopen'
robk-tahoe [Thu, 25 Sep 2008 16:39:19 +0000 (09:39 -0700)]
gui/macapp: make submenu of aliases for 'webopen'

this changes the 'open webroot' menu item to be a submenu listing all aliases
defined in ~/.tahoe.  Note that the dock menu does not support submenus, so it
only offers a single 'open webroot' option for the default tahoe: alias.

I had trouble with this at first and concluded that the submenus didn't work,
and made it a distinct 'WebUI' menu in it's own right.  on further inspection,
there are still problems but they seem to be something like once the dock menu
has been used, sometimes the app's main menubar menus will cease to function,
and this happens regardless of whether submenus or plain simple menus are used.
I have no idea what the peoblem is, but it's not submenu specific.

16 years agorepairer: fix flaw in testutil.flip_one_bit() that Brian pointed out
Zooko O'Whielacronx [Thu, 16 Oct 2008 19:48:48 +0000 (12:48 -0700)]
repairer: fix flaw in testutil.flip_one_bit() that Brian pointed out

16 years agomisc/incident-gatherer: add classify_tahoe.py: a foolscap incident-gatherer classific...
Brian Warner [Wed, 15 Oct 2008 22:09:40 +0000 (15:09 -0700)]
misc/incident-gatherer: add classify_tahoe.py: a foolscap incident-gatherer classification plugin

16 years agorepairer: test all different kinds of corruption that can happen to share files on...
Zooko O'Whielacronx [Tue, 14 Oct 2008 23:09:20 +0000 (16:09 -0700)]
repairer: test all different kinds of corruption that can happen to share files on disk

16 years agoutil/time_format.py: accept space separator, add unit tests
Brian Warner [Mon, 13 Oct 2008 22:52:58 +0000 (15:52 -0700)]
util/time_format.py: accept space separator, add unit tests