david-sarah [Wed, 27 Jan 2010 07:03:09 +0000 (23:03 -0800)]
Miscellaneous documentation, test, and code formatting tweaks.
david-sarah [Wed, 27 Jan 2010 06:44:30 +0000 (22:44 -0800)]
Prevent mutable objects from being retrieved from an immutable directory, and associated forward-compatibility improvements.
Brian Warner [Wed, 27 Jan 2010 22:40:40 +0000 (14:40 -0800)]
test_runner: cleanup, refactor common code into a non-executable method
Having both test_node() and test_client() (one of which calls the other) felt
confusing to me, so I changed it to have test_node(), test_client(), and a
common do_create() helper method.
Brian Warner [Wed, 27 Jan 2010 22:37:58 +0000 (14:37 -0800)]
scripts/runner.py: simplify David-Sarah's clever grouped-commands usage trick
Brian Warner [Wed, 27 Jan 2010 22:35:17 +0000 (14:35 -0800)]
tahoe backup: skip all symlinks, with warning. Fixes #850, addresses #641.
Brian Warner [Wed, 27 Jan 2010 22:22:09 +0000 (14:22 -0800)]
NEWS: update with all recent user-visible changes
Brian Warner [Wed, 27 Jan 2010 20:10:44 +0000 (12:10 -0800)]
"tahoe backup": fix --exclude-vcs docs to include Git
Brian Warner [Wed, 27 Jan 2010 20:09:56 +0000 (12:09 -0800)]
docs: fix references to --no-storage, explanation of [storage] section
Zooko O'Whielacronx [Tue, 26 Jan 2010 17:00:21 +0000 (09:00 -0800)]
docs: further CREDITS level-ups for Nils, Kevan, David-Sarah
david-sarah [Sun, 24 Jan 2010 03:00:20 +0000 (19:00 -0800)]
Patch to accept t=set-children as well as t=set_children
david-sarah [Tue, 26 Jan 2010 06:34:14 +0000 (22:34 -0800)]
Fix boodlegrid use of set_children
Zooko O'Whielacronx [Tue, 26 Jan 2010 14:34:11 +0000 (06:34 -0800)]
ftpd: clearer error message if Twisted needs a patch (by Nils Durner)
Kevan Carstensen [Fri, 15 Jan 2010 20:45:00 +0000 (12:45 -0800)]
Add 'docs/performance.txt', which (for the moment) describes mutable file performance issues
Zooko O'Whielacronx [Tue, 26 Jan 2010 13:21:33 +0000 (05:21 -0800)]
docs: more CREDITS for François, Kevan, and David-Sarah
francois [Wed, 20 Jan 2010 09:42:49 +0000 (01:42 -0800)]
tahoe_backup.py: display warnings on errors instead of stopping the whole backup. Fix #729.
This patch displays a warning to the user in two cases:
1. When special files like symlinks, fifos, devices, etc. are found in the
local source.
2. If files or directories are not readables by the user running the 'tahoe
backup' command.
In verbose mode, the number of skipped files and directories is printed at the
end of the backup.
Exit status returned by 'tahoe backup':
- 0 everything went fine
- 1 the backup failed
- 2 files were skipped during the backup
david-sarah [Sun, 24 Jan 2010 22:06:29 +0000 (14:06 -0800)]
Warn about test failures due to setting FLOG* env vars
david-sarah [Sat, 16 Jan 2010 20:45:56 +0000 (12:45 -0800)]
Message saying that we couldn't find bin/tahoe should say where we looked
david-sarah [Tue, 12 Jan 2010 04:44:09 +0000 (20:44 -0800)]
Change running.html to describe 'tahoe run'
Zooko O'Whielacronx [Tue, 26 Jan 2010 04:45:59 +0000 (20:45 -0800)]
cli: merge the better version of David-Sarah's split-usage-and-help patch with the earlier version that I mistakenly committed
david-sarah [Tue, 12 Jan 2010 04:39:35 +0000 (20:39 -0800)]
Split tahoe --help options into groups.
Zooko O'Whielacronx [Tue, 26 Jan 2010 04:39:21 +0000 (20:39 -0800)]
cli: split usage strings into groups (patch by David-Sarah Hopwood)
david-sarah [Sat, 16 Jan 2010 05:20:55 +0000 (21:20 -0800)]
Add create-node CLI command, and make create-client equivalent to create-node --no-storage (fixes #760)
david-sarah [Sun, 24 Jan 2010 22:43:25 +0000 (14:43 -0800)]
Remove replace= parameter to mkdir-immutable and mkdir-with-children
francois [Sat, 9 Jan 2010 12:30:10 +0000 (04:30 -0800)]
contrib/fuse/runtests.py: Fix #888, configure settings in tahoe.cfg and don't treat warnings as failure
Fix a few bitrotten pieces in the FUSE test script. It now configures tahoe
node settings by editing tahoe.cfg which is the new supported method.
It alos tolerate warnings issued by the mount command, the cause of these
warnings is the same as in #876 (contrib/fuse/runtests.py doesn't tolerate
deprecations warnings).
Brian Warner [Thu, 21 Jan 2010 06:50:52 +0000 (22:50 -0800)]
Fix webapi t=mkdir with multpart/form-data, as on the Welcome page. Closes #919.
Brian Warner [Fri, 15 Jan 2010 06:42:20 +0000 (22:42 -0800)]
tahoe_add_alias.py: minor refactoring
Brian Warner [Fri, 15 Jan 2010 06:27:13 +0000 (22:27 -0800)]
test_dirnode.py: reduce scope of a Client instance, suggested by Kevan.
Brian Warner [Fri, 15 Jan 2010 01:46:32 +0000 (17:46 -0800)]
test_provisioning: STAN is not always a list. Fix by David-Sarah Hopwood.
Brian Warner [Thu, 14 Jan 2010 22:28:04 +0000 (14:28 -0800)]
web/directory.py mkdir-immutable: hush pyflakes, add TODO for #903 behavior
Brian Warner [Thu, 14 Jan 2010 22:17:19 +0000 (14:17 -0800)]
hush pyflakes-0.4.0 warnings: slightly less-trivial fixes. Closes #900.
This includes one fix (in test_web) which was testing the wrong thing.
Brian Warner [Thu, 14 Jan 2010 22:15:29 +0000 (14:15 -0800)]
hush pyflakes-0.4.0 warnings: remove trivial unused variables. For #900.
Brian Warner [Thu, 14 Jan 2010 21:02:46 +0000 (13:02 -0800)]
tahoe add-alias/create-alias: don't corrupt non-newline-terminated alias
file. Closes #741.
Brian Warner [Thu, 14 Jan 2010 20:11:19 +0000 (12:11 -0800)]
change docs and --help to use "grid" instead of "virtual drive": closes #892.
Thanks to David-Sarah Hopwood for the patch.
Brian Warner [Thu, 14 Jan 2010 19:40:52 +0000 (11:40 -0800)]
backupdb.txt: fix ST_CTIME reference
Brian Warner [Wed, 13 Jan 2010 00:42:26 +0000 (16:42 -0800)]
client.py: fix/update comments on KeyGenerator
Brian Warner [Tue, 12 Jan 2010 01:33:43 +0000 (17:33 -0800)]
Clean up log.err calls, for one of the issues in #889.
allmydata.util.log.err() either takes a Failure as the first positional
argument, or takes no positional arguments and must be invoked in an
exception handler. Fixed its signature to match both foolscap.logging.log.err
and twisted.python.log.err . Included a brief unit test.
Brian Warner [Tue, 12 Jan 2010 00:07:23 +0000 (16:07 -0800)]
tidy up DeadReferenceError handling, ignore them in add_lease calls
Stop checking separately for ConnectionDone/ConnectionLost, since those have
been folded into DeadReferenceError since foolscap-0.3.1 . Write
rrefutil.trap_deadref() in terms of rrefutil.trap_and_discard() to improve
code coverage.
Brian Warner [Mon, 11 Jan 2010 19:01:32 +0000 (11:01 -0800)]
NEWS: improve "tahoe backup" notes, mention first-backup-after-upgrade duration
Thanks to Francois Deppierraz for the suggestion.
Brian Warner [Sun, 10 Jan 2010 20:35:52 +0000 (12:35 -0800)]
test_repairer: add (commented-out) test_each_byte, to see exactly what the
Verifier misses
The results (described in #819) match our expectations: it misses corruption
in unused share fields and in most container fields (which are only visible
to the storage server, not the client). 1265 bytes of a 2753 byte
share (hosting a 56-byte file with an artifically small segment size) are
unused, mostly in the unused tail of the overallocated UEB space (765 bytes),
and the allocated-but-unwritten plaintext_hash_tree (480 bytes).
Zooko O'Whielacronx [Sun, 10 Jan 2010 20:37:21 +0000 (12:37 -0800)]
repairer: fix some wrong offsets in the randomized verifier tests, debugged by Brian
fixes #819
Brian Warner [Sun, 10 Jan 2010 08:46:19 +0000 (00:46 -0800)]
test_repairer: fix colliding basedir names, which caused test inconsistencies
Zooko O'Whielacronx [Sun, 10 Jan 2010 01:36:19 +0000 (17:36 -0800)]
repairer: add deterministic test for #819, mark as TODO
francois [Sat, 9 Jan 2010 17:59:46 +0000 (09:59 -0800)]
contrib/fuse/runtests.py: Tolerate the tahoe CLI returning deprecation warnings
Depending on the versions of external libraries such as Twisted of Foolscap,
the tahoe CLI can display deprecation warnings on stdout. The tests should
not interpret those warnings as a failure if the node is in fact correctly
started.
See http://allmydata.org/trac/tahoe/ticket/859 for an example of deprecation
warnings.
fixes #876
Zooko O'Whielacronx [Sat, 9 Jan 2010 17:49:56 +0000 (09:49 -0800)]
contrib: fix fuse_impl_c to use new Python API
original patch by Thomas Delaet, fixed by François, reviewed by Brian, committed by me
Zooko O'Whielacronx [Sat, 9 Jan 2010 06:04:35 +0000 (22:04 -0800)]
docs: CREDITS: add David-Sarah to the CREDITS file
Brian Warner [Sat, 2 Jan 2010 22:08:41 +0000 (14:08 -0800)]
mutable/publish: don't loop() right away upon DeadReferenceError. Closes #877
The bug was that a disconnected server could cause us to re-enter the initial
loop() call, sending multiple queries to a single server, provoking an
incorrect UCWE. To fix it, stall the loop() with an eventual.fireEventually()
Brian Warner [Tue, 29 Dec 2009 23:39:09 +0000 (15:39 -0800)]
immutable/checker.py: oops, forgot some imports. Also hush pyflakes.
Brian Warner [Tue, 29 Dec 2009 23:37:46 +0000 (15:37 -0800)]
mutable repair: return successful=False when numshares<k (thus repair fails),
instead of weird errors. Closes #874 and #786.
Previously, if the file had 0 shares, this would raise TypeError as it tried
to call download_version(None). If the file had some shares but fewer than
'k', it would incorrectly raise MustForceRepairError.
Added get_successful() to the IRepairResults API, to give repair() a place to
report non-code-bug problems like this.
Brian Warner [Tue, 29 Dec 2009 23:04:09 +0000 (15:04 -0800)]
node.py/interfaces.py: minor docs fixes
Brian Warner [Tue, 29 Dec 2009 23:03:10 +0000 (15:03 -0800)]
NEWS: fix 1.4.1 announcement w.r.t. add-lease behavior in older releases
Brian Warner [Tue, 29 Dec 2009 23:01:08 +0000 (15:01 -0800)]
checker: don't let failures in add-lease affect checker results. Closes #875.
Mutable servermap updates and the immutable checker, when run with
add_lease=True, send both the do-you-have-block and add-lease commands in
parallel, to avoid an extra round trip time. Many older servers have problems
with add-lease and raise various exceptions, which don't generally matter.
The client-side code was catching+ignoring some of them, but unrecognized
exceptions were passed through to the DYHB code, concealing the DYHB results
from the checker, making it think the server had no shares.
The fix is to separate the code paths. Both commands are sent at the same
time, but the errback path from add-lease is handled separately. Known
exceptions are ignored, the others (both unknown-remote and all-local) are
logged (log.WEIRD, which will trigger an Incident), but neither will affect
the DYHB results.
The add-lease message is sent first, and we know that the server handles them
synchronously. So when the checker is done, we can be sure that all the
add-lease messages have been retired. This makes life easier for unit tests.
Brian Warner [Sun, 27 Dec 2009 23:54:44 +0000 (18:54 -0500)]
test_cli: verify fix for "tahoe get" not creating empty file on error (#121)
Brian Warner [Sun, 27 Dec 2009 23:21:49 +0000 (18:21 -0500)]
addendum to "Fix 'tahoe ls' on files (#771)"
tahoe_ls.py: tolerate missing metadata
web/filenode.py: minor cleanups
test_cli.py: test 'tahoe ls FILECAP'
Brian Warner [Sun, 27 Dec 2009 22:54:43 +0000 (17:54 -0500)]
Fix 'tahoe ls' on files (#771). Patch adapted from Kevan Carstensen.
web/filenode.py: also serve edge metadata when using t=json on a
DIRCAP/childname object.
tahoe_ls.py: list file objects as if we were listing one-entry directories.
Show edge metadata if we have it, which will be true when doing
'tahoe ls DIRCAP/filename' and false when doing 'tahoe ls
FILECAP'
Brian Warner [Sun, 27 Dec 2009 22:04:04 +0000 (17:04 -0500)]
tahoe_get: don't create the output file on error. Closes #121.
Brian Warner [Sun, 27 Dec 2009 20:10:43 +0000 (15:10 -0500)]
webapi: don't accept zero-length childnames during traversal. Closes #358, #676.
This forbids operations that would implicitly create a directory with a
zero-length (empty string) name, like what you'd get if you did "tahoe put
local /oops/blah" (#358) or "POST /uri/CAP//?t=mkdir" (#676). The error
message is fairly friendly too.
Also added code to "tahoe put" to catch this error beforehand and suggest the
correct syntax (i.e. without the leading slash).
Brian Warner [Sun, 27 Dec 2009 19:58:28 +0000 (14:58 -0500)]
CLI: send 'Accept:' header to ask for text/plain tracebacks. Closes #646.
The webapi has been looking for an Accept header since 1.4.0, but it treats a
missing header as equal to */* (to honor RFC2616). This change finally
modifies our CLI tools to ask for "text/plain, application/octet-stream",
which seems roughly correct (we either want a plain-text traceback or error
message, or an uninterpreted chunk of binary data to save to disk). Some day
we'll figure out how JSON fits into this scheme.
Brian Warner [Sun, 27 Dec 2009 16:37:03 +0000 (11:37 -0500)]
Makefile: upload-tarballs: switch from xfer-client to flappclient, closes #350
I've also set up a new flappserver on source@allmydata.org to receive the
tarballs. We still need to replace the gutsy buildslave (which is where the
tarballs used to be generated+uploaded) and give it the new FURL.
Brian Warner [Sun, 27 Dec 2009 02:48:32 +0000 (21:48 -0500)]
misc/ringsim.py: make it deterministic, more detail about grid-is-full behavior
Brian Warner [Sat, 26 Dec 2009 06:03:39 +0000 (01:03 -0500)]
misc/ringsim.py: tool to discuss #302
Zooko O'Whielacronx [Thu, 24 Dec 2009 22:35:22 +0000 (14:35 -0800)]
docs: fix helper.txt to describe new config style
Brian Warner [Thu, 24 Dec 2009 20:21:33 +0000 (15:21 -0500)]
docs/stats.txt: add TOC, notes about controlling gatherer's listening port
Thanks to Jody Harris for the suggestions.
Brian Warner [Wed, 23 Dec 2009 05:24:00 +0000 (00:24 -0500)]
Add docs/stats.py, explaining Tahoe stats, the gatherer, and the munin plugins.
Brian Warner [Tue, 15 Dec 2009 00:01:47 +0000 (16:01 -0800)]
more #859: avoid deprecation warning for unit tests too, hush pyflakes
* factor maybe-import-sha logic into util.hashutil
Zooko O'Whielacronx [Mon, 14 Dec 2009 21:27:03 +0000 (13:27 -0800)]
use hashlib module if available, thus avoiding a DeprecationWarning for importing the old sha module; fixes #859
Zooko O'Whielacronx [Tue, 8 Dec 2009 23:29:43 +0000 (15:29 -0800)]
docs: reflow architecture.txt to 78-char lines
Zooko O'Whielacronx [Tue, 8 Dec 2009 21:27:37 +0000 (13:27 -0800)]
docs: update the about.html a little
Zooko O'Whielacronx [Fri, 13 Nov 2009 16:30:33 +0000 (08:30 -0800)]
docs: remove obsolete doc file "codemap.txt"
I started to update this to reflect the current codebase, but then I thought (a) nobody seemed to notice that it hasn't been updated since December 2007, and (b) it will just bit-rot again, so I'm removing it.
Brian Warner [Tue, 8 Dec 2009 17:29:21 +0000 (09:29 -0800)]
mutable/retrieve.py: stop reaching into private MutableFileNode attributes
Brian Warner [Tue, 8 Dec 2009 17:26:08 +0000 (09:26 -0800)]
mutable/servermap.py: stop reaching into private MutableFileNode attributes
Brian Warner [Tue, 8 Dec 2009 17:11:56 +0000 (09:11 -0800)]
mutable/servermap.py: oops, query N+e servers in MODE_WRITE, not k+e
under normal conditions, this wouldn't cause any problems, but if the shares
are really sparse (perhaps because new servers were added), then
file-modifies might stop looking too early and leave old shares in place
Brian Warner [Mon, 7 Dec 2009 06:05:12 +0000 (22:05 -0800)]
control.py: fix speedtest: use download_best_version (not read) on mutable nodes
Brian Warner [Mon, 7 Dec 2009 05:28:03 +0000 (21:28 -0800)]
FTP-and-SFTP.txt: fix ssh-keygen pointer
Zooko O'Whielacronx [Sun, 6 Dec 2009 18:48:35 +0000 (10:48 -0800)]
setup: ignore _darcs in the "test-clean" test and make the "clean" step remove all .egg's in the root dir
Brian Warner [Tue, 1 Dec 2009 22:54:38 +0000 (17:54 -0500)]
remove MutableFileNode.download(), prefer download_best_version() instead
Brian Warner [Tue, 1 Dec 2009 22:44:35 +0000 (17:44 -0500)]
Simplify immutable download API: use just filenode.read(consumer, offset, size)
* remove Downloader.download_to_data/download_to_filename/download_to_filehandle
* remove download.Data/FileName/FileHandle targets
* remove filenode.download/download_to_data/download_to_filename methods
* leave Downloader.download (the whole Downloader will go away eventually)
* add util.consumer.MemoryConsumer/download_to_data, for convenience
(this is mostly used by unit tests, but it gets used by enough non-test
code to warrant putting it in allmydata.util)
* update tests
* removes about 180 lines of code. Yay negative code days!
Overall plan is to rewrite immutable/download.py and leave filenode.read() as
the sole read-side API.
Brian Warner [Tue, 1 Dec 2009 02:46:07 +0000 (21:46 -0500)]
server.py: undo my bogus 'correction' of David-Sarah's comment fix
and move it to a better line
Brian Warner [Mon, 30 Nov 2009 21:10:09 +0000 (13:10 -0800)]
Implement more coherent behavior when copying with dircaps/filecaps (closes #761). Patch by Kevan Carstensen.
Brian Warner [Mon, 30 Nov 2009 19:59:13 +0000 (11:59 -0800)]
storage.py: update comment
david-sarah [Sat, 21 Nov 2009 05:56:44 +0000 (21:56 -0800)]
storage server: detect disk space usage on Windows too (fixes #637)
david-sarah [Sat, 21 Nov 2009 06:15:43 +0000 (22:15 -0800)]
make status of finished operations consistently "Finished"
Brian Warner [Fri, 27 Nov 2009 22:42:17 +0000 (17:42 -0500)]
NEWS: update with all user-visible changes since the last release
Brian Warner [Fri, 27 Nov 2009 05:59:00 +0000 (00:59 -0500)]
update "tahoe backup" docs, and webapi.txt's mkdir-with-children
Brian Warner [Thu, 26 Nov 2009 23:42:57 +0000 (15:42 -0800)]
Add dirnodes to backupdb and "tahoe backup", closes #606.
* backups now share dirnodes with any previous backup, in any location,
so renames and moves are handled very efficiently
* "tahoe backup" no longer bothers reading the previous snapshot
* if you switch grids, you should delete ~/.tahoe/private/backupdb.sqlite,
to force new uploads of all files and directories
Brian Warner [Thu, 26 Nov 2009 23:27:31 +0000 (15:27 -0800)]
webapi: fix t=check for DIR2-LIT (i.e. empty immutable directories)
Brian Warner [Tue, 24 Nov 2009 21:25:12 +0000 (13:25 -0800)]
PipelineError: fix str() on python2.4 . Closes #842.
Brian Warner [Fri, 20 Nov 2009 07:55:53 +0000 (23:55 -0800)]
test_uri.py: s/NewDirnode/Dirnode/ , now that they aren't "new" anymore
Brian Warner [Fri, 20 Nov 2009 07:52:55 +0000 (23:52 -0800)]
interface name cleanups: IFileNode, IImmutableFileNode, IMutableFileNode
The proper hierarchy is:
IFilesystemNode
+IFileNode
++IMutableFileNode
++IImmutableFileNode
+IDirectoryNode
Also expand test_client.py (NodeMaker) to hit all IFilesystemNode types.
Brian Warner [Fri, 20 Nov 2009 07:22:39 +0000 (23:22 -0800)]
class name cleanups: s/FileNode/ImmutableFileNode/
also fix test/bench_dirnode.py for recent dirnode changes
Brian Warner [Wed, 18 Nov 2009 19:28:13 +0000 (11:28 -0800)]
Use DIR-IMM and t=mkdir-immutable for "tahoe backup", for #828
Brian Warner [Wed, 18 Nov 2009 19:18:32 +0000 (11:18 -0800)]
web/directory.py: use "DIR-IMM" to describe immutable directories, not DIR-RO
Brian Warner [Wed, 18 Nov 2009 19:17:36 +0000 (11:17 -0800)]
web/info.py: hush pyflakes
Brian Warner [Wed, 18 Nov 2009 19:16:24 +0000 (11:16 -0800)]
make get_size/get_current_size consistent for all IFilesystemNode classes
* stop caching most_recent_size in dirnode, rely upon backing filenode for it
* start caching most_recent_size in MutableFileNode
* return None when you don't know, not "?"
* only render None as "?" in the web "more info" page
* add get_size/get_current_size to UnknownNode
Brian Warner [Wed, 18 Nov 2009 16:42:38 +0000 (08:42 -0800)]
ImmutableDirectoryURIVerifier: fix verifycap handling
Brian Warner [Wed, 18 Nov 2009 07:09:00 +0000 (23:09 -0800)]
Add t=mkdir-immutable to the webapi. Closes #607.
* change t=mkdir-with-children to not use multipart/form encoding. Instead,
the request body is all JSON. t=mkdir-immutable uses this format too.
* make nodemaker.create_immutable_dirnode() get convergence from SecretHolder,
but let callers override it
* raise NotDeepImmutableError instead of using assert()
* add mutable= argument to DirectoryNode.create_subdirectory(), default True
Brian Warner [Wed, 18 Nov 2009 01:54:44 +0000 (17:54 -0800)]
move convergence secret into SecretHolder, next to lease secret
Brian Warner [Thu, 12 Nov 2009 00:22:33 +0000 (16:22 -0800)]
nodemaker: implement immutable directories (internal interface), for #607
* nodemaker.create_from_cap() now handles DIR2-CHK and DIR2-LIT
* client.create_immutable_dirnode() is used to create them
* no webapi yet
Brian Warner [Wed, 11 Nov 2009 22:45:42 +0000 (14:45 -0800)]
stop using IURI()/etc as an adapter
Brian Warner [Wed, 11 Nov 2009 22:25:42 +0000 (14:25 -0800)]
clean up uri-vs-cap terminology, emphasize cap instances instead of URI strings
* "cap" means a python instance which encapsulates a filecap/dircap (uri.py)
* "uri" means a string with a "URI:" prefix
* FileNode instances are created with (and retain) a cap instance, and
generate uri strings on demand
* .get_cap/get_readcap/get_verifycap/get_repaircap return cap instances
* .get_uri/get_readonly_uri return uri strings
* add filenode.download_to_filename() for control.py, should find a better way
* use MutableFileNode.init_from_cap, not .init_from_uri
* directory URI instances: use get_filenode_cap, not get_filenode_uri
* update/cleanup bench_dirnode.py to match, add Makefile target to run it
Brian Warner [Wed, 4 Nov 2009 17:24:53 +0000 (09:24 -0800)]
add parser for immutable directory caps: DIR2-CHK, DIR2-LIT, DIR2-CHK-Verifier