New patches: [Add extensions/README and more doc strings to the fuse extension. nejucomo@gmail.com**20071120195842] { merger 0.0 ( hunk ./contrib/README 1 +This directory contains code and extensions which are not strictly a part +of Tahoe. They may or may not currently work. + merger 0.0 ( addfile ./contrib/README addfile ./contrib/README ) ) merger 0.0 ( merger 0.0 ( merger 0.0 ( addfile ./contrib/README addfile ./contrib/README ) hunk ./contrib/README 1 +This directory contains code and extensions which are not strictly a part +of Tahoe. They may or may not currently work. + ) merger 0.0 ( merger 0.0 ( addfile ./contrib/README addfile ./contrib/README ) hunk ./contrib/README 1 + +This directory contains optional/experimental extensions to Tahoe. + +In general these extensions are separate programs that access a running +node through its web api (see doc/webapi.txt). + +These programs are not part of Tahoe proper, may be developed +independently, and may not be as thoroughly supported. Please view the +relevant source code comments before using them. Caveat emptor. ) ) hunk ./contrib/tahoe-fuse.py 5 + +Usage Notes: + +This is a proof-of-concept, and not production quality. It uses the +FUSE interface, and where bugs or unimplemented features are encountered +the file system may become confused. + +In my experience with ubuntu's linux version 2.6.20-16-generic, and +python-fuse version 2.5-5build1, the worst behavior is that processes +which are accessing the fuse filesystem when some bugs occur hang. +Also, the filesystem is currently single-threaded and blocking, so one +bug interrupts all filesystem client processes. + +The rest of my system seems stable even in these cases (the rest of the +filesystem and other processes function). + +The current design caches EACH FILE ENTIRELY IN MEMORY as long as any +process has that file open. Expect horrible memory usage. (But also, subsequent reads after the first should be fast. ;-) + + hunk ./contrib/tahoe-fuse.py 26 + hunk ./contrib/tahoe-fuse.py 28 -- Thin as possible. -- This is a proof-of-concept, not a usable product. +- Thin rather than clever. (Even when that means clunky.) + + +Status Quo: + +- Reads cache entire file contents, violating the thinness goal. Can we GET spans of files? +- Single threaded. } Context: [setup: fix name of setup script again zooko@zooko.com**20080112004603] [setup: fix name of setup script zooko@zooko.com**20080112004448] [setup: switch back from using "misc/dependencies/setup.py easy_install --always-unzip misc/dependencies" to using "misc/dependencies/setup.py install" zooko@zooko.com**20080112004043 because I don't fully understand the former, I suspect it of being implicated in the current buildslave redness, and we require --always-unzip solely for py2exe. ] [setup: if the build fails, make returns a failure exit code zooko@zooko.com**20080111204331] [tests: increase the timeout on a test which failed on the overloaded virtual buildslaves zooko@zooko.com**20080111202754] [offloaded: add a system test, make it pass. files are now being uploaded through the helper. warner@lothar.com**20080111114255] [offloaded.py: hush pyflakes warner@lothar.com**20080111110514] [offloaded: more test coverage on client side, change interfaces a bit warner@lothar.com**20080111105337] [docs/mutable-DSA.txt: update mutable.txt to reflect our proposed DSA-based mutable file scheme (#217) warner@lothar.com**20080111103058] [test_mutable.py: accomodate changes to mutable.py logging warner@allmydata.com**20080111041834] [mutable.py: log more information during publish, specifically the sharemap, and the reason for an UncoordinatedWriteError warner@allmydata.com**20080111041623] [Makefile: add new misc/dependencies/ litter to the 'clean' target warner@allmydata.com**20080111022444] [.darcs-boringfile: update to match misc/dependencies setup.py changes warner@allmydata.com**20080111022110] [build-deps-setup.py: import twisted early, to make setuptools on dapper use the right version warner@allmydata.com**20080111021502] [fix dumb typo in tahoe run robk-tahoe@allmydata.com**20080111021400] [change default node-directory on windows to do registry lookup, not ~/.tahoe robk-tahoe@allmydata.com**20080111013218] [move registry module into allmydata.windows package robk-tahoe@allmydata.com**20080111010323] [remove some vestigial cruft from tahoesvc robk-tahoe@allmydata.com**20080110215204] [add files from allmydata/web to py2exe distribution robk-tahoe@allmydata.com**20080110213446 when building the py2exe package, glob src/allmydata/web/* into web/ within the dist ] [fix a couple of typos in tahoesvc startup robk-tahoe@allmydata.com**20080110213031] [fix nevow build prob for py2exe robk-tahoe@allmydata.com**20080110212619 nevow attempts to use pkg_resources to find the formless css file upon import, if pkg_resources is available. unfortunately using pkg_resources to find files is not supported if the files are being loaded from a zip archive (i.e. only source and egg), and further py2exe uses a zip bundle for all the code and dependent libraries. hence having both pkg_resources and nevow built into an exe causes nevow to explode upon import. this tells py2exe not to link pkg_resources into the target, so that this behaviour isn't stimulated. the side effect being that pkg_resources isn't available. ] [added tweaked sibpath implementation robk-tahoe@allmydata.com**20080110212341 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. ] [resolve makefile conflicts robk-tahoe@allmydata.com**20080110032115 and surpress echo of echoes ] [add 'run' command to tahoe robk-tahoe@allmydata.com**20080110015412 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. ] [add build dependencies to support py2exe's modulefinder robk-tahoe@allmydata.com**20080110012538 adds windows/depends.py as a container for modules which are needed at runtime but which py2exe's modulefinder dependency analysis fails to find as requisites. ] [added a 'repl' command to tahoe.exe robk-tahoe@allmydata.com**20080110011952 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. ] [add windows-exe target to makefile robk-tahoe@allmydata.com**20080110010628] [tweaks to build process to support py2exe robk-tahoe@allmydata.com**20080110010253 py2exe is unable to handle .eggs which are packaged as zip files in preference it will pull in other versions of libraries if they can be found in the environment. this changes causes .eggs to be built as .egg directories, which py2exe can handle. ] [first stab at windows build details. robk-tahoe@allmydata.com**20080110010156 there are many and various fiddly details that were involved in this process on mountain view. This is a stripped down version of the build process used there. there's hence a good chance that one or two necessary details got stripped down through the cracks. this provides a py2exe setup.py to build a tahoe.exe and a tahoesvc.exe the former is equivalent to bin/tahoe, but without the start/stop commands. the latter is a windows service that instantiates a client whose basedir is found in the registry. ] [tweak running to make node start/stop code optional robk-tahoe@allmydata.com**20080109015118 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 ] [docs: mention some tips of how to resolve a certain dependency on Dapper zooko@zooko.com**20080110213238] [docs: start updating install-details.html to reflect current auto-dependency and setuptools requirements, and to be better written zooko@zooko.com**20080110200337] [setup: require setuptools >= v0.6c6 on all platforms zooko@zooko.com**20080110200213 Technically, we could get away with v0.6c5 or v0.6c4 on non-cygwin platforms, but if someone currently doesn't have setuptools >= v0.6c6 installed then our setup process will just use our bundled setuptools v0.6c7 anyway, so it will still work, and this makes the setup.py and the accompanying documentation simpler. ] [setup: remove hard import of ez_setup -- we can proceed even if ez_setup can't be imported zooko@zooko.com**20080110200152] [setup: shebang usr bin env python zooko@zooko.com**20080110200131] [setup: remove the hack to determine if we can avoid the explicit setuptools-managed dependency on nevow (which was useful for building on dapper) zooko@zooko.com**20080110195800 For simplicity, and to avoid weird failure modes that result from importing nevow during the build process, we now simply require nevow >= 0.6.0. We currently bundle in misc/dependencies nevow v0.9.18, which will not work on Dapper, since it requires Twisted >= 2.4.0, and Dapper comes with Twisted 2.2.0. Dapper users can (a) install a newer Twisted, (b) install nevow 0.6.0 in egg form so that setuptools can tell that it is installed (without importing it), (c) beg us to start shipping nevow 0.6.0 instead of nevow 0.9.18 in our bundle. ] [setup: update the version numbers of packages that we require, add zope.interface to our requirements, make nevow >= 0.6.0 always be a requirement zooko@zooko.com**20080110195639] [docs: add require version numbers of deps to install.html, move pywin32 from install.html to install-details.html, change ref to install-details.html in install.html zooko@zooko.com**20080110193530] [offloaded: move interfaces to interfaces.py, start implementing backend warner@allmydata.com**20080110032547] [upload.py: start removing wait_for_numpeers code warner@allmydata.com**20080110032518] [offloaded: basic test for client-side of AssistedUploader warner@allmydata.com**20080110022550] [offloaded: create a Helper if 'run_helper' is non-empty warner@allmydata.com**20080110022505] [test_system: slight refactoring to eventually make it easier to configure some nodes with the output of others warner@allmydata.com**20080110022354] [Makefile: pyflakes: the newest pyflakes is more picky, more verbose, and prints the same message multiple times warner@allmydata.com**20080110022312] [offloaded: more code, fix pyflakes problems, change IEncryptedUploader a bit warner@allmydata.com**20080109235847] [offloaded: early code: most of client-side, defined the RemoteInterfaces warner@allmydata.com**20080109031854] [check_speed.py: re-enable 100x200B and 1x100MB CHK tests warner@allmydata.com**20080109025948] [docs/mutable-DSA.svg: fix background color, resolution for export-to-png warner@allmydata.com**20080109021104] [docs/mutable-DSA.svg: add a picture of the upcoming DSA-based mutable file structure warner@allmydata.com**20080109020852] [User friendly error messages, and updates to use new URI formats. nejucomo@gmail.com**20080108182121 ] [TAG allmydata-tahoe-0.7.0 zooko@zooko.com**20080108184749] [TAG allmydata-tahoe-0.7.0 zooko@zooko.com**20080108182816] [fix webish unit tests by making node.url file optional robk-tahoe@allmydata.com**20080108183614] [test_system: assert that BASEDIR/node.url is created properly warner@allmydata.com**20080107234622] [reinstate creation of node.url files upon startup robk-tahoe@allmydata.com**20080108000456 a recent purge of the start.html code also took away the logic that wrote 'node.url' into the node root. this is required for the tahoe cli tool to find the node. this puts back a limited fraction of that code, so that the node writes out a node.url file upon startup. ] [short note about building cryptopp under cywin/native on win robk-tahoe@allmydata.com**20080107235020] [add a note to README.win32 about building cryptopp etc on cygwin robk-tahoe@allmydata.com**20080107213545] [Make the purpose and location of the tahoe executable more explicit in install.html. nejucomo@gmail.com**20080108173326 ] [setup: update licensing information in setup.py comments and metadata zooko@zooko.com**20080108174500] [docs: update configuration.txt to mention the private subdir and edit the description of webport zooko@zooko.com**20080108174407] [docs: fix hyperlinks from install.html to the Win32 and Cygwin notes zooko@zooko.com**20080108173848] [docs: update the example link in using.html zooko@zooko.com**20080108172345] [direct the user to docs/write_coordination.html in case of an UncoordinatedWriteError zooko@zooko.com**20080108171506] [docs: make it so that people will stop experiencing build failure due to g++ not being installed zooko@zooko.com**20080108170329] [docs: relnotes for 0.7.0 zooko@zooko.com**20080108170144] [CREDITS for nejucomo zooko@zooko.com**20080108165417] [setup: update in-line doc of get-version.py zooko@zooko.com**20080108165101] [docs: add not to dirnode.txt that it is obsolete zooko@zooko.com**20080108165025] [rename "dir-uri" to "dir-cap" zooko@zooko.com**20080108164127] [tahoe-fuse: print out helpful error messages if the caller didn't give the right context zooko@zooko.com**20080108164035] [setup: fix it to direct the user to install.html in case of build failure zooko@zooko.com**20080108163949] [docs: some documentation updates for 0.7.0 zooko@zooko.com**20080108163241] [setup: direct user to doc/install.html if the build fails zooko@zooko.com**20080107232302] [util.log: add levels like UNUSUAL warner@allmydata.com**20080107233245] [mutable: improve logging: mark events with level=log.WEIRD and log.UNUSUAL warner@allmydata.com**20080107230916] [mutable.py: update comment about uncoordinated writes appearing as not-enough-peers(unable to get privkey) errors warner@allmydata.com**20080107204805] [doc: describe how to start client first in running.html zooko@zooko.com**20080106071657] [remove runtime dependency upon setuptools (which crept into allmydata.get_package_versions) warner@allmydata.com**20080105025341] [contrib/README: make it clear that these things might not work warner@allmydata.com**20080105015216] [rename 'extensions' to 'contrib', with the goal of making it clear that contrib/ things might not work warner@allmydata.com**20080105015154] [Makefile: don't run darcsver if we already have _version.py. Ought to fix building on non-darcs checkouts, and close #257 warner@allmydata.com**20080104232546] [added "tahoe webopen" command robk-tahoe@allmydata.com**20080105003410 taking the same arguments as tahoe ls, it does a webbrowser.open to the page specified by those args. hence "tahoe webopen" will open a browser to the root dir specified in private/root_dir.cap by default. this might be a good alternative to the start.html page. ] [more introductory doc cleanup zooko@zooko.com**20080105000919 mv README to docs/about.html and reformat it as HTML add a new README which is a text file pointing to docs/{about,install,running}.html include the Transitive Grace Period Public Licence in its HTML form (it is too big) ] [quick hacks to make install-details.html viewable as html robk-tahoe@allmydata.com**20080104233415] [new licences, move details from README to doc/install-details.html zooko@zooko.com**20080104182742] [suppress the skipped and the todo unit tests in order to make unit test results prettier (the install.html instructs users to run the unit tests) zooko@zooko.com**20080104063618] [doc: even simpler running.html zooko@zooko.com**20080104031159] [updated roadmap.txt to show things that are finished and add WebDAV secorp@allmydata.com**20080103235706] [fix test_cli to put the root_dir.cap in the private subdir zooko@zooko.com**20080103234853] [cmdline: give useful error messages about the --dir-uri and ~/.tahoe/private/root_dir.cap zooko@zooko.com**20080103233535] [a few formatting tidy-ups zooko@zooko.com**20080103231419] [remove automatic private dir zooko@zooko.com**20080103230205 * rename my_private_dir.cap to root_dir.cap * move it into the private subdir * change the cmdline argument "--root-uri=[private]" to "--dir-uri=[root]" ] [add human-encodings of caps, refactor encodings of caps, tighten checks, fix unit tests to use values of the right size zooko@zooko.com**20080103225543] [add regexes to idlib to match certain kinds of base32-encoded values zooko@zooko.com**20080103224446] [test_client.py: validate more versioning code warner@allmydata.com**20080103203824] [test_client.py: assert allmydata.__version__ is not unknown warner@allmydata.com**20080103203459] [Makefile: run 'make-version' at least once, in the 'build' target, to make sure we populate src/allmydata/_version.py warner@allmydata.com**20080103203333] [fix idlib.could_be_base32_encoded_l() to accept *only* valid strings zooko@zooko.com**20080103174311] [refactor constructing URI objects from strings and add human-encoding of WriteableSSKFileURI zooko@zooko.com**20080103041215] [docs/Makefile: rules to turn our SVG images into .png and .eps forms warner@lothar.com**20080102230022] [debian: update dependencies to match calc-deps.py, mainly pycryptopp-0.2.8 warner@allmydata.com**20080102211434] [running.html: fix usage of 'tahoe create-client' and 'tahoe start', explain ~/.tahoe, add closing tags warner@lothar.com**20080102035046] [README: update required version numbers, fix small cut-and-paste error warner@lothar.com**20080102033646] [docs: update install.html and update and format running.html zooko@zooko.com**20080101232007] [setup: add back "build-deps" as an alias for "build-auto-deps" since I don't know how to configure the buildmaster zooko@zooko.com**20080101075802 And I am very tired. ] [setup: whoops, fix the use of source-tree-root-dir eggs in our Makefile zooko@zooko.com**20080101075331] [docs: a couple of improvements to install.html zooko@zooko.com**20080101075250] [setup: fix bin/tahoe to include .egg's from the source tree root dir as well zooko@zooko.com**20080101075128 This is necessary, as we can't prevent setuptools from respecting any such eggs, therefore we need to respect them in order to maintain consistency. However, we don't normally install any "install_requires" eggs into the source tree root dir. ] [setup: rename build-deps to build-auto-deps zooko@zooko.com**20080101074921] [setup: "make" now defaults to "simple-build", which depends on build-deps zooko@zooko.com**20080101064430 This is for conformance with the simple new install.html. People who don't want build-deps can run "make build". ] [setup: clean up darcsver egg on "make clean" zooko@zooko.com**20080101055825] [setup: update the list of files that we think are boring when we are using darcs zooko@zooko.com**20080101054904] [setup: finish renaming of docs/testnet to docs/testgrid zooko@zooko.com**20080101053659] [setup: use darcsver instead of pyutil for darcsver, use setup.py plugin instead of executable for darcsver zooko@zooko.com**20080101052831 This hopefully fixes the deb builders. ] [setup: add darcsver source tarball to misc/dependencies zooko@zooko.com**20080101052651 In the future, we're likely to stop keeping misc/dependencies under revision control, as per http://allmydata.org/trac/tahoe/ticket/249 ] [docs: even further simplify and reformat install.html zooko@zooko.com**20071231143907] [docs: format install.html into HTML format zooko@zooko.com**20071231020118] [docs: a bunch of updates to simplify the process of installing from source and running Tahoe zooko@zooko.com**20071230114717 These changes are a work-in-progress -- there are many incomplete and incorrect parts, but the install.html and running.html files are complete and should work (and they are delightfully concise!). I'm pushing this just to let people see incremental progress and to solicit feedback. "Testing out" the install.html and running.html files and submitting patches or bug reports would be quite welcome. More to come. ] [docs: a few updates, edits, and formatting tweaks to README.win32 zooko@zooko.com**20071230113812] [refactor webish.py slightly, improve the test coverage a bit. One test is marked SKIP pending improvements in webish.py warner@lothar.com**20071225094857] [test_web.py: fix pyflakes error warner@lothar.com**20071225075604] [webish: use get_args() everywhere, put .fields=None in MyRequest warner@lothar.com**20071225060704] [test_web: more coverage of URIPOSTHandler error cases warner@lothar.com**20071225044935] [test_web: test POST_upload_no_link against /uri, not /uri/ warner@lothar.com**20071224235538] [test_web.py: use /uri?t=mkdir instead of /uri/?t=mkdir, and confirm that the redirection target is correct warner@lothar.com**20071224234652] [webish: factor out queryargs-or-formargs extraction, make /uri?t=mkdir work and redirect to a valid url warner@lothar.com**20071224232652] [node.py: remove the provoke-logport-furlfile-creation hack now that foolscap-0.2.3 does it for us, and add bridge-twisted-logs warner@lothar.com**20071224232440] [upgrade to foolscap-0.2.3 warner@lothar.com**20071224232327] [Makefile: put an existing PYTHONPATH in front of our generated EGGSPATH, to make it easier to test tahoe against development versions of dependent libraries warner@lothar.com**20071224232153] [setup: allow shell built-ins "true" and "false" so that I can experiment with deb builders on an OSX box. ;-) zooko@zooko.com**20071222175010] [setup: fix bug in bugfix to patch to include .egg's found in CWD zooko@zooko.com**20071222171952] [setup: fix bug in previous patch to include .egg's from CWD zooko@zooko.com**20071222171427] [setup: we also need to include .egg's in the CWD in our search path, because if we install a 3rd party library into support/, and *it* installs a library that *it* requires, that one will appear in CWD zooko@zooko.com**20071222170424 It would be nice to figure out a way to force them to all appear in support/ where they belong. ] [setup: zope.interface bundle .tar instead of .tar.gz because multiple bundled .tar's compress together much more nicely than multiple bundled .tar.gz's do. :-) zooko@zooko.com**20071222165054] [setup: upgrade bundle zfec-1.1.tar.gz to zfec-1.3.4.tar zooko@zooko.com**20071222165039] [setup: simplejson bundle .tar instead of .tar.gz because multiple bundled .tar's compress together much more nicely than multiple bundled .tar.gz's do. :-) zooko@zooko.com**20071222165029] [setup: upgrade bundle from setuptools_darcs-1.0.6.tar.gz to setuptools_darcs-1.1.5.tar zooko@zooko.com**20071222165003] [setup: bundle pyutil-1.3.12.tar zooko@zooko.com**20071222164947] [setup: pycryptopp: bundle .tar instead of .tar.gz because multiple bundled .tar's compress together much more nicely than multiple bundled .tar.gz's do. :-) zooko@zooko.com**20071222164935] [setup: foolscap bundle .tar instead of .tar.gz because multiple bundled .tar's compress together much more nicely than multiple bundled .tar.gz's do. :-) zooko@zooko.com**20071222164920] [setup: bundle argparse-0.8.0.tar zooko@zooko.com**20071222164754 It isn't actually needed for Tahoe, only for the command-line tools from pyutil. Later I will make an "extras" category within pyutil to specify in a machine-readable way that argparse is not required for pyutil unless you want the command-line tools. ] [setup: Nevow bundle .tar instead of .tar.gz because multiple bundled .tar's compress together much more nicely than multiple bundled .tar.gz's do. :-) zooko@zooko.com**20071222164706] [setup: update doc in __init__.py zooko@zooko.com**20071222164650] [setup: small tidy-up of Make rules zooko@zooko.com**20071222164631] [setup: refactor ez_setup.py and setup.py to satisfy the Desert Island scenario, to find and use setuptools egg in-place in misc/dependencies, and make it setup_require pyutil (for darcsver) zooko@zooko.com**20071222164447] [setup: copy in the latest version of ez_setup.py, which works even if setuptools is already imported, or can be imported, into the current Python interpreter, but can't be imported into a new Python interpreter in a subprocess zooko@zooko.com**20071222052620 This actually happens in practice -- this fixes the Desert Island scenario. Thanks to PJE. ] [setup: finish switching from Tahoe's versions of autoversioning tools to pyutil's versions zooko@zooko.com**20071221204238] [setup: remove misc/make-version.py and invoke "darcsver" from the pyutil library zooko@zooko.com**20071221001755 misc/make-version.py has a limitation which prevents it from generating version stamps from our current darcs history. This limitation has been fixed in pyutil's "darcsver". Rather than copy the fix from there to misc/make-version.py, I'm making it so that you have to install pyutil if you want to automatically generate _version.py files from the current darcs history. ] [setup: fix scheme ("file:") for download base for boostrapping setuptools zooko@zooko.com**20071220221814] [setup: fix typo in name of download base for bootstrapping setuptools zooko@zooko.com**20071220221630] [setup: fix the name of "misc/dependencies" for bootstrapping setuptools zooko@zooko.com**20071220221310] [setup: use os.path.join('misc', 'dependencies') instead of "misc/dependencies" zooko@zooko.com**20071220220717 In the hopes that this will make the boostrapping of setuptools from its bundled egg work on Windows. ] [webish: add button to make directories and unit test of it zooko@zooko.com**20071220213112 Unfortunately although it passes the unit tests, it doesn't work, because the unit tests and the implementation use the "encode params into URL" technique but the button uses the "encode params into request body" technique. ] [make the unit test of the overwrite button more general zooko@zooko.com**20071220212307] [make the wapi/wui [*] support creation of a new directory without there already being an existing directory to link the new one into zooko@zooko.com**20071220185817 [*] WebAPI/WebUI ] [fix representation of node ids in PeerTracker objects zooko@zooko.com**20071219235528] [remove some no-longer needed replacements of "/" with "!" in uris zooko@zooko.com**20071219235440] [mutable: always include ourselves in the querylist when Publishing, because 0.7.0 usually stores our root dirnode only on ourselves, and our nodeid might not appear in the first N+epsilon peers warner@allmydata.com**20071219060653] [mutable.py: one more logging fix warner@allmydata.com**20071219054241] [mutable.py: oops, our logging wrappers can't take posargs yet warner@allmydata.com**20071219053616] [mutable.Publish: improve logging warner@allmydata.com**20071219053050] [dirnode: add set_uris() and set_nodes() (plural), to set multiple children at once. Use it to set up a new webapi test for issue #237. warner@allmydata.com**20071219053002] [node: provoke foolscap-0.2.2 into saving logport.furl, so we can attach to it with 'flogtool dump'. Also, place it in private/, since logs are considered somewhat private warner@allmydata.com**20071219052702] [more new-pyflakes warnings fixed warner@allmydata.com**20071219005133] [the new pyflakes is stricter, complaining about function definitions that overshadow earlier definitions or imports. Fix some of its complaints. warner@allmydata.com**20071219004728] [hush pyflakes warner@allmydata.com**20071219003722] [unit test that POST /uri/?t=mkdir works zooko@zooko.com**20071218234749] [remove the DirnodeURI foolscap schema and mv those regexes into uri.py zooko@zooko.com**20071218234424 We currently do not pass dirnode uris over foolscap. ] [create_node.py: need to create private/ dir in create-client so we can touch the my_private_dir.cap file warner@allmydata.com**20071218214218] [oops, touch private/my_private_dir.cap when creating the client warner@allmydata.com**20071218213659] [check_load: add stats-gathering warner@allmydata.com**20071218200737] [make more precise regexp for WriteableSSKFileURI and DirnodeURI and use it in unit tests zooko@zooko.com**20071218191508 Also allow an optional leading "http://127.0.0.1:8123/uri/". Also fix a few unit tests to generate bogus Dirnode URIs of the modern form instead of the former form. ] [add a simple load-generating tool to do random reads and writes warner@allmydata.com**20071218030607] [move my_private_dir.cap into private/ warner@allmydata.com**20071218025740] [my_private_dir.cap: add newline for readability, open with mode 'w' not 'w+' since we don't need to read from this filehandle warner@allmydata.com**20071218024848] [remove the slash-to-bang conversion from CLI tools and webapi.txt warner@allmydata.com**20071218022226] [fix unit tests to assert that we do *not* link to start.html when there is no private dir, instead of asserting that we *do* zooko@zooko.com**20071218005116] [do not put a link from the welcoÂme page to the start.html if there is not a private directory zooko@zooko.com**20071218003559] [rename "my_private_dir.uri" to "my_private_dir.cap" zooko@zooko.com**20071218003525] [rename "secret" to "lease_secret" and change its size from 16 to 32 bytes zooko@zooko.com**20071218003411] [put all private state in $BASEDIR/private zooko@zooko.com**20071217223954 fixes #219 The only part of #219 that this doesn't include is the part about logpublisher, which has been moved out of tahoe into foolscap. ] [we no longer need to replace "/" with "!" in urls zooko@zooko.com**20071215002550] [tidy-up some comments and logging messages zooko@zooko.com**20071215002446] [fix the overwrite button and add unit test for it zooko@zooko.com**20071214235205] [test_system.py: oops, match change in RIControl warner@lothar.com**20071214090816] [test_web.py: cosmetic, remove leftover trailing space warner@lothar.com**20071214080609] [check-speed: test SSK upload/download speed too. SDMF imposes a limit on the file sizes, no 10MB or 100MB test warner@lothar.com**20071214080531] [Makefile check-speed: force-quit any leftover client before starting a new test warner@lothar.com**20071214080425] [remove logpublisher, use the Foolscap version now that this functionality has been moved into Foolscap-0.2.2 warner@lothar.com**20071213023101] [remove tests of logging functionality that's been subsumed by foolscap logging warner@lothar.com**20071213022353] [move to foolscap-0.2.2 warner@lothar.com**20071213022145] [remove unimplemented and skipped test for feature that we don't plan to implement any time soon (XML-RPC interface) zooko@zooko.com**20071213020605] [remove unused import: thanks, pyflakes zooko@zooko.com**20071213020530] [refactor the feature of getting versions of packages, include the version numbers of more of the packages that we use zooko@zooko.com**20071213013737] [a few documentation and naming convention updates zooko@zooko.com**20071213013408 Notable: the argument to make REPORTER has been renamed to TRIALARGS. ] [setup: bundle setuptools_darcs plugin in misc/dependencies zooko@zooko.com**20071213012042] [editing: change names like "MyThing" to "FakeThing" for fake objects in unit tests zooko@zooko.com**20071212001029] [fix unit test to pass forward-slashes to the CLI since it demands that the CLI emit forward-slashes zooko@zooko.com**20071212020344] [test_web.py: survive localdir/localfile= names with spaces. Should close #223 warner@allmydata.com**20071212014704] [test_system: write test data in 'b' verbatim mode, since on windows the default text-mode is different. Addresses one of the failures in #223 warner@allmydata.com**20071212011633] [webish: append save=true to a GET URL to save-to-disk. Closes #222. warner@allmydata.com**20071212000444] [README.win32: add note showing MikeB where this file is making false statements :-) zooko@zooko.com**20071211232610] [README.win32: clarify layout a bit zooko@zooko.com**20071211232558] [fix import error, detected thanks to "make test" zooko@zooko.com**20071211232301] [fix missing import, thanks to pyflakes zooko@zooko.com**20071211230029] [fix test_introducer to wait for the right things in order to avoid intermittent test failures zooko@zooko.com**20071211200815] [fix IntroducerClient.when_enough_peers() zooko@zooko.com**20071211022259 add IntroducerClient.when_few_enough_peers(), fix and improve test_introducer ] [setup.py: arg, another stupid paste error, affecting cygwin warner@allmydata.com**20071211021734] [setup.py: fix stupid cut-and-paste error warner@allmydata.com**20071211020838] [build-deps: require setuptools 0.6c4 or later, because older ones don't allow foolscap to use os.random at import time warner@allmydata.com**20071211020659] [upgrade to foolscap-0.2.1, with a new logging framework warner@lothar.com**20071211003508] [move increase_rlimits() into iputil and make it a no-op on Windows zooko@zooko.com**20071207140343] [control.py: hush pyflakes warning warner@allmydata.com**20071207003842] [the wait_for_numpeers= argument to client.upload() is optional: make both the code and the Interface reflect this warner@allmydata.com**20071207003658] [make check-memory use the new POST /uri?t=upload zooko@zooko.com**20071206232823] [make control.get_memory_usage() return all zeroes if reading /proc/mem/whatsit raises an exception zooko@zooko.com**20071206232740] [add POST /uri?t=upload and tests thereof zooko@zooko.com**20071206231702 Hm... I refactored processing of segments in a way that I marked as "XXX HELP I AM YUCKY", and then I ran out of time for rerefactoring it before I committed. At least all the tests pass. ] [storage.py: factor out a common compare() routine warner@allmydata.com**20071205062034] [webish: fix overwrite form display warner@allmydata.com**20071205061513] [test_web.py: add coverage for directory listings that include mutable files warner@allmydata.com**20071205055740] [test_web.py: add coverage for POST t=check warner@allmydata.com**20071205054938] [webish: add POST t=mutable, make it replace files in-place, add t=overwrite warner@allmydata.com**20071205054254] [test_web.py: remove last use of fake_* methods, remove dead code warner@allmydata.com**20071205051100] [refactor web tests, and interfaces.IFileNode warner@allmydata.com**20071205050137] [checker: improve test coverage a little bit warner@allmydata.com**20071205000012] [uri.py: improve test coverage warner@allmydata.com**20071204233831] [remove most (maybe all?) traces of old Dirnode class. Yay for negative code days. warner@allmydata.com**20071204230058] [improve test coverage on FileNode.check warner@allmydata.com**20071204215527] [test_dirnode.py: obtain full coverage of dirnode.py warner@allmydata.com**20071204203204] [rename dirnode2.py to dirnode.py warner@allmydata.com**20071204174520] [test_mutable: improve test coverage a bit, add test_filenode.py warner@allmydata.com**20071204033754] [remove PyCrypto, now we only use pycrypto++ warner@allmydata.com**20071204001001] [use AES from pycryptopp instead of pycrypto, also truncate the keys slightly differently warner@allmydata.com**20071203232746] [remove leftover defer.setDebugging(), to speed up tests from 200s to 83s warner@allmydata.com**20071203231002] [fix several bugs and warnings -- thanks, pyflakes zooko@zooko.com**20071203214235] [merge patch to integrate decentralized directories with "introducer_and_vdrive.py: use logpublisher too" zooko@zooko.com**20071203212904] [merge patch to integrate decentralized directories with patch "download: use hierarchical logging" zooko@zooko.com**20071203212721] [merge patch to integrate decentralized directories with patch to "only test log.err when Twisted is new enough to let us ignore the generated errors" zooko@zooko.com**20071203212514] [merge patch to integrate decentralized directories with patch to handle bad hashes zooko@zooko.com**20071203212114] [decentralized directories: integration and testing zooko@zooko.com**20071203205242 * use new decentralized directories everywhere instead of old centralized directories * provide UI to them through the web server * provide UI to them through the CLI * update unit tests to simulate decentralized mutable directories in order to test other components that rely on them * remove the notion of a "vdrive server" and a client thereof * remove the notion of a "public vdrive", which was a directory that was centrally published/subscribed automatically by the tahoe node (you can accomplish this manually by making a directory and posting the URL to it on your web site, for example) * add a notion of "wait_for_numpeers" when you need to publish data to peers, which is how many peers should be attached before you start. The default is 1. * add __repr__ for filesystem nodes (note: these reprs contain a few bits of the secret key!) * fix a few bugs where we used to equate "mutable" with "not read-only". Nowadays all directories are mutable, but some might be read-only (to you). * fix a few bugs where code wasn't aware of the new general-purpose metadata dict the comes with each filesystem edge * sundry fixes to unit tests to adjust to the new directories, e.g. don't assume that every share on disk belongs to a chk file. ] [unit tests: bump up a timeout which I encountered when running on a very slow machine zooko@zooko.com**20071129204735] [introducer_and_vdrive.py: use logpublisher too warner@allmydata.com**20071120202226] [setup: README: warn against Python 2.4.1, recommend easy_install, link to easy_install download page, edit for clarity zooko@zooko.com**20071120193922] [setup: make dependency failures more helpful (thanks to Priyanka) zooko@zooko.com**20071120060744] [setup: README: a few clarifications thanks to Priyanka zooko@zooko.com**20071120050853] [encode.py: trivial whitespace change warner@allmydata.com**20071120050029] [A hastily written single-threaded read-only fuse client. nejucomo@gmail.com**20071120072150] [more hierarchical logging: download/upload/encode warner@allmydata.com**20071120013341] [download: use hierarchical logging warner@allmydata.com**20071120010710] [logging: only test log.err when Twisted is new enough to let us ignore the generated errors warner@allmydata.com**20071120003700] [hierarchical logging: add numbered messages and parent= args warner@allmydata.com**20071120002318] [setup: pycryptopp: upgrade from v0.2.7 to v0.2.8 zooko@zooko.com**20071119215517] [setup: pycryptopp: upgrade from v0.2.6 to v0.2.7 (adds AES) zooko@zooko.com**20071119210711] [remove tahoe_put-web2ish.py zooko@zooko.com**20071119200728 It isn't currently used, and I don't remember what part of its behavior was so much better than tahoe_put.py, and Brian has subsequently improved tahoe_put.py. ] [debian: add Depends: on python-pycryptopp, now that it's been packaged warner@allmydata.com**20071119190450] [test_client: stall 2.0s between shutdown and restart, trying to fix cygwin warner@lothar.com**20071119024126] [logtool: add 'gather' and 'dump' modes warner@lothar.com**20071119003204] [logtool: rename get-logs.py to logtool.py warner@lothar.com**20071119003055] [logpublisher: hush pyflakes warning warner@allmydata.com**20071117021446] [logpublisher: implement subscribe/publish for log, add a sample client warner@lothar.com**20071117020750] [mutable: fix control flow to allow good+bad shares from a peer. Fixes #211. warner@allmydata.com**20071116231233] [node.py: try to fix rlimit-setting again warner@allmydata.com**20071116221238] [node.py: try rlimit fix again warner@allmydata.com**20071116050902] [node.py: try to fix RLIMIT_NOFILE on solaris too warner@allmydata.com**20071116050644] [node.py: raise RLIMIT_NOFILE on bsd/cygwin to more than 256 warner@allmydata.com**20071116045355] [test_mutable: workaround: use more peers to avoid random test failures. warner@allmydata.com**20071115205500 The underlying issue is recorded in #211: one corrupt share in a query response will cause us to ignore the remaining shares in that response, even if they are good. In our tests (with N=10 but only 5 peers), this can leave us with too few shares to recover the file. The temporary workaround is to use 10 peers, to make sure we never get multiple shares per response. The real fix will be to fix the control flow. This fixes #209. ] [mutable: add more logging to retrieval process warner@allmydata.com**20071115202256] [provisioning: add more options for num-servers and server-dBA warner@allmydata.com**20071115194049] [mutable: validate share_hash_chain for each inbound share warner@allmydata.com**20071114212646] [mutable: handle bad hashes, improve test coverage, rearrange slightly to facilitate these warner@allmydata.com**20071114050815] [setup: pass INCLUDE_DIRS and LIBRARY_DIRS variables, if any to setup.py from Makefile zooko@zooko.com**20071114021659 ] [README: advise 'make clean' before 'make build-deps' (after update), otherwise old versions of the dependent libaries can be used in preference to the newer one warner@allmydata.com**20071113202449] [docs/subtree1.svg: make the page smaller warner@allmydata.com**20071113195451] [IMutableFileNode is a subtype of IFileNode zooko@zooko.com**20071110223718 I'm not 100% sure that this is correct, but it looks reasonable, it passes unit tests (although note that unit tests are currently not covering the new mutable files very well), and it makes the "view JSON" link on a directory work instead of raising an assertion error. ] [don't provide the "overwrite" button if the file is readonly to you zooko@zooko.com**20071110220705] [WUI: hook up an "overwrite" button on mutable files zooko@zooko.com**20071110165345] [setup: new name for setuptools_darcs plugin is also boring zooko@zooko.com**20071110002809] [remove parts of pycrypto that we are no longer going to use: SHA256 and RSA zooko@zooko.com**20071110002112] [hashutil.py: switch from pycrypto to pycryptopp SHA256 zooko@zooko.com**20071109204013] [setup: require pycryptopp >= 0.2.6 zooko@zooko.com**20071110001500] [setup: upgrade bundled pycryptopp from v0.2.5 to v0.2.6 zooko@zooko.com**20071110001436] [mutable.py: fix padding/shape-of-input-data to zfec zooko@zooko.com**20071110000625] [setup: automatically discover files to include in packages zooko@zooko.com**20071110000419 (Because they are python packages or because they are registered under darcs revision control.) ] [setup: continue running setup.py even if ez_setup.py can't be imported zooko@zooko.com**20071109205803] [setup: fix formatting of error messages from makefile zooko@zooko.com**20071109191339] [setup: require pycryptopp >= v0.2.5 zooko@zooko.com**20071109190315] [setup: upgrade the bundled pycryptopp tarball from pycryptopp v0.2.3 to pycryptopp v0.2.5 zooko@zooko.com**20071109190249] [docs/webapi.txt: document the POST t=upload&mutable=on command used to create mutable files warner@lothar.com**20071109100507] [webish: add preliminary mutable file support: upload, download, listings, JSON, URI, RO-URI. No replace yet. warner@lothar.com**20071109095427] [consolidate dirnode/filenode-creation code into Client warner@lothar.com**20071109085451] [mutable: verify incoming share signatures during Publish, it's not that expensive and it's a good idea warner@allmydata.com**20071108200236] [test_system: RSA keys are even more variable than I thought, 2044..2049 warner@lothar.com**20071108110411] [mutable: add basic test coverage of new-dirnodes-using-mutable-files warner@lothar.com**20071108103100] [mutable: cheap padding hack to make zfec tolerate short files warner@lothar.com**20071108103037] [mutable: fix multiple-versions-interfering-with-each-other bug. replace() tests now pass. warner@lothar.com**20071108100733] [test_system: RSA keys vary in size, expand valid ranges in test warner@lothar.com**20071108090113] [mutable: grab encprivkey when necessary during publish, fix test_mutable warner@lothar.com**20071108084627] [docs/configuration.txt: expand the 'sizelimit' docs warner@lothar.com**20071108080842] [mutable: rearrange order of Publish to allow replace() to work. Doesn't work yet. Also test_mutable is disabled for a while. warner@allmydata.com**20071108030139] [Makefile: check-deps: check for pycryptopp warner@allmydata.com**20071108015046] [mutable: fix usage of NeedMoreDataError warner@allmydata.com**20071107235209] [mutable: wire in RSA for real, using pycryptopp warner@allmydata.com**20071107235135] [mutable: make error handling more robust warner@allmydata.com**20071107234545] [hashutil: replace pycrypto's SHA256 with pycryptopp's SHA256 zooko@zooko.com*-20071108000239] [hashutil: replace pycrypto's SHA256 with pycryptopp's SHA256 zooko@zooko.com**20071108000239] [setup: tell setuptools that we depend on pycryptopp >= 0.2.3 zooko@zooko.com**20071107235518] [setup: upgrade to pycryptopp v0.2.3 zooko@zooko.com**20071107235446] [mutable: test roundtrip, make it work warner@allmydata.com**20071107201901] [storage.py: add a little logging (disabled) warner@allmydata.com**20071107201454] [setup: print out the version number of pycryptopp in "tahoe --version" zooko@zooko.com**20071107161156] [setup: add Crypto++ and pycryptopp to dependencies zooko@zooko.com**20071107160013 Crypto++ is a new manual dependency (boo hoo), and pycryptopp is a new automatic dependency. ] [setup: add misc/dependencies/pycryptopp-0.2.1.tar.gz zooko@zooko.com**20071107155951] [CREDITS: more credit to nejucomo since we accepted a doc patch zooko@zooko.com**20071107160107] [README: fix whitespace zooko@zooko.com**20071107160057] [Add "sizelimit" to configuration doc. nejucomo@gmail.com**20071105074642] [test_system.mutable: make sure we exercise FEC padding warner@allmydata.com**20071107015033] [dump-share: emit SDMF information too warner@allmydata.com**20071107014631] [add container_size to mutable dump-share output warner@allmydata.com**20071107013122] [mutable: stub out pubkey creation until we wire in pycryptopp properly warner@allmydata.com**20071107012706] [test_system.mutable: add test coverage for the 'dump-share' debug command warner@allmydata.com**20071107011049] [test_system: add early test for mutable slots, currently publish-only warner@allmydata.com**20071107005711] [test_mutable: remove dead code warner@allmydata.com**20071107005639] [debug: add mutable-slot support to 'dump-share' command warner@allmydata.com**20071107005555] [mutable: storage_index is always 16 bytes warner@allmydata.com**20071107005434] [mutable: fix use of storage API warner@allmydata.com**20071107005334] [stabilize on 20-byte nodeids everywhere, printed with foolscap's base32 warner@allmydata.com**20071107004959] [mutable: rearrange classes, putting MutableFileNode at the bottom warner@allmydata.com**20071106211948] [mutable: parameterize Publish/Retrieve classes in MutableFileNode, for tests warner@allmydata.com**20071106211809] [mutable: move IV into signed prefix, add more retrieval code warner@allmydata.com**20071106210446] [mutable: get most of the retrieve-side code written. no tests yet. warner@lothar.com**20071106094729] [test_mutable.py: hush pyflakes warner@lothar.com**20071106073239] [mutable.Publish: rearrange create() to use more of it in unit tests warner@lothar.com**20071106063340] [mutable.Publish: more tests warner@allmydata.com**20071106043843] [mutable.Publish: create a dispatch_map for the benefit of recovery code, and pull pack/unpack methods out into functions warner@allmydata.com**20071106041459] [mutable: use proper enable/renew/cancel secrets warner@allmydata.com**20071106035108] [Makefile: add 'find-trailing-spaces' tool and target warner@allmydata.com**20071106033208] [mutable: added send-messages-to-peers code, about 70% done. No recovery code yet. warner@allmydata.com**20071106032947] [storage: rewrite slot API, now use testv_and_readv_and_writev or readv warner@allmydata.com**20071106021714] [test_mutable: hush pyflakes warning warner@lothar.com**20071105064153] [mutable: add peer-selection to Publish, and some basic unit tests warner@lothar.com**20071105063807] [storage: add readv_slots: get data from all shares warner@lothar.com**20071105063701] [mutable.py: start writing share-mapping code warner@allmydata.com**20071103055902] [Makefile: add simple 'repl' target to start a python interpreter with a useful PYTHONPATH warner@allmydata.com**20071103053255] [mutable.py: add share-unpacking code, use it for more tests warner@allmydata.com**20071103052831] [mutable.txt: need offset of EOF too warner@allmydata.com**20071103052807] [mutable.txt: more notes warner@allmydata.com**20071103035341] [mutable: implement filenode share-packing, still pretty rough warner@allmydata.com**20071103035139] [mutable.py: sketch out data-structure packing/unpacking methods warner@lothar.com**20071102070328] [mutable: split dirnode stuff out to dirnode2.py, will be renamed later warner@lothar.com**20071102064647] [test_client: increase test_reloadable inter-run timeout, cygwin was failing warner@allmydata.com**20071102021908] [mutable: improve NewDirectoryNode test coverage warner@allmydata.com**20071102013554] [implement preliminary log publisher/gatherer warner@allmydata.com**20071102002915 This creates a Referenceable object that will eventually be able to publish log events to a remote subscriber (at present all it can do is provide version information). The FURL for this logport is written to 'logport.furl'. In addition, if a file named 'log_gatherer.furl' is present, the given target will be contacted and offered access to the logport. This can be used by a centralized logging agent to subscribe to logs, e.g. from all the nodes in a centrally-maintained storage grid. (think syslog -r, but with all the security properties of FURLs, and permitting non-printable strings and structured data). Once this framework matures a bit, it will be moved into Foolscap. ] [Client.tub_ready: upcall to Node warner@allmydata.com**20071102002712] [mutable: implement most remaining dirnode methods. No tests yet. warner@allmydata.com**20071101235758] [bencode.py: reencode as UTF-8 warner@allmydata.com**20071101224257] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101223435] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101223431] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101223428] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101223421] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101223418] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101223412] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101223407] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101223401] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101223347] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101223341] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222931] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222928] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222917] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222912] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222903] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222858] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222854] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222850] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222520] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222516] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222512] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222509] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222504] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222500] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222257] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222247] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222241] [trailing-whitespace eradication, no functional changes warner@allmydata.com**20071101222238] [mutable: first pass at dirnodes, filenodes, new URIs. Some test coverage. warner@allmydata.com**20071101221529 The URI typenames need revision, and only a few dirnode methods are implemented. Filenodes are non-functional, but URI/key-management is in place. There are a lot of classes with names like "NewDirectoryNode" that will need to be rename once we decide what (if any) backwards compatibility want to retain. ] [move NotMutableError from dirnode.py into interfaces.py warner@allmydata.com**20071101220307] [docs/mutable.txt: put fingerprint in read-write URI too, it makes everything easier warner@allmydata.com**20071031233015] [storage.py: fix tests, timestamps get updated when leases are renewed warner@allmydata.com**20071031193133] [storage.py: more test coverage, make sure leases survive resizing warner@allmydata.com**20071031190747] [storage.py: improve test coverage even more warner@lothar.com**20071031084401] [storage.py: more mutable-slot coverage, renewing/cancelling leases warner@lothar.com**20071031083156] [test_node.py: more coverage of Node.log warner@lothar.com**20071031075659] [test_node.py: improve test coverage of node.py warner@lothar.com**20071031075442] [mutable slots: add some test coverage for lease-addition warner@lothar.com**20071031073830] [mutable slots: finish up basic coding on server-side containers, add some tests. Remove all caching from MutableShareFile. warner@lothar.com**20071031071040] [mutable.txt: we're now sort of ready to handle lease-migration warner@lothar.com**20071031070408] [checkpointing mutable-file work. Storage layer is 80% in place. warner@allmydata.com**20071031024736] [mutable.txt: more updates: record offset of extra lease count instead of the actual extra leases warner@allmydata.com**20071031024658] [webish.py: handle asynchronous checker results. warner@allmydata.com**20071031000037 Thanks to robk for pointing out that Nevow will accept a Deferred almost everywhere. In this case, we just pass a Deferred into ctx.fillSlots(). One quirk: nevow doesn't evaluate all rows of the table in parallel: using a slow Deferred in a slot in one row seems to stall the next row until that one has fired, probably to simplify the flattening of the HTML. ] [docs/mutable.txt: add IV, define a place for it in the data structure Brian Warner **20071030025112] ['tahoe stop': use SIGKILL, clean up twistd.pid ourselves, wait forever warner@allmydata.com**20071029184335] [docs/mutable.txt: we need readkey IV Brian Warner **20071030011451] [shush, pyflakes zooko@zooko.com**20071027015321] [improve code coverage by removing untested raise RuntimeError and replacing it with tested assert zooko@zooko.com**20071027013740] [checker.checker_results_for: ignore uris of 'None' warner@allmydata.com**20071027013837] [cli: use urllib.quote() on vdrive-path arguments before passing them through HTTP zooko@zooko.com**20071027013044] [mutable.txt: use merkle trees on blocks, since it probably won't be that hard (the code is all being copied from the CHK classes anyways), and that keeps the storage format identical to the MDMF case, for better forward-compatibility warner@allmydata.com**20071026232501] [mutable.txt: fix everybody-gets-read bug, define WE-update protocol, add accepting-nodeid to leases to allow updating lease tokens warner@allmydata.com**20071026231550] [docs: add writeup of our mutable-file plans warner@lothar.com**20071026092656] [webish: tolerate not having a checker, since some unit tests don't make one warner@allmydata.com**20071024003531] [webish: add checker results and a 'Check' button to the web interface warner@allmydata.com**20071024002357] [interfaces: clarify IChecker.checker_results_for a bit warner@allmydata.com**20071023011046] [update docs about webport (fixes #185) zooko@zooko.com**20071023005052] [checker: remember checker results, but only in ram for now warner@allmydata.com**20071023004624] [checker.py: rearrange classes a little bit warner@allmydata.com**20071022231918] [make the anchor text in the WUI be descriptive of the target -- not "Click Here!"! czooko@zooko.com**20071022235630] [trivial change to comment -- sentences start with a capital letter and end with a punctuation mark czooko@zooko.com**20071022235520 I've been volunteering in Irby's first-grade class, and you do NOT get a star on your Power Sentences worksheet unless you follow this rule. ] [patch the LogObserver in a more modern, forward-compatible way and update the in-line comments about it czooko@zooko.com**20071022235255] [munin: add a sample file for /etc/munin/plugin-conf.d/ warner@allmydata.com**20071022220839] [cli: improve test coverage warner@lothar.com**20071021193317] [tahoe_ls: list individual files warner@lothar.com**20071021193306] [Win32 openSSH info booker@allmydata.com**20071019180241] [munin: oops, fix that trailing-newline fix, the previous one mangled the config warner@allmydata.com**20071018194922] [munin: remove extra blank line from config output warner@allmydata.com**20071018193926] [munin: update shareholder plugins to match current storage layout warner@allmydata.com**20071018190858] [Makefile: add ubuntu 'gutsy' as a .deb target warner@allmydata.com**20071017203511] [DEPENDENCIES: recommend the 'build-essential' package instead of gcc+make, Brian Warner **20071018033331 since it includes important things like libc6-dev ] [checker: return more information per CHK file, including the shareholder list warner@lothar.com**20071017092550] [add an equally-simple file-verifier warner@allmydata.com**20071016192509] [encode.py: update comments, max_segment_size is now 2MiB warner@allmydata.com**20071016180029] [add a simple checker, for both files and directories warner@allmydata.com**20071015231639] [doc: emphasize in our "description" field that we are under a Free Software licence czooko@zooko.com**20071016043509] [relnotes.txt: fix bug in relnotes.txt for v0.6.1 -- it incorrectly described v0.6 as having been released in August; it was actually September czooko@zooko.com**20071016043325] [TAG allmydata-tahoe-0.6.1 zooko@zooko.com**20071016041556] Patch bundle hash: 10b902bf8f18f50622b61eef0c5370164e00d50a