1 patch for repository http://allmydata.org/source/tahoe-lafs/trunk: Sun Nov 21 23:10:52 CET 2010 francois@ctrlaltdel.ch * checker+repairer: Improve deep-check resilience in the presence of unrecoverable subdirectories Previously, when a deep-check operation found an unrecoverable subdirectory, an exception was raised. The whole operation was then stopped and the deep-check report was lost. This patch improves this behaviour by allowing the operation to continue while correctly recording the repair failure in the deep-check report. The CLI now also displays the name of each file on which a repair was attempted. New patches: [checker+repairer: Improve deep-check resilience in the presence of unrecoverable subdirectories francois@ctrlaltdel.ch**20101121221052 Ignore-this: a96e31ead2c301b4b585112491663013 Previously, when a deep-check operation found an unrecoverable subdirectory, an exception was raised. The whole operation was then stopped and the deep-check report was lost. This patch improves this behaviour by allowing the operation to continue while correctly recording the repair failure in the deep-check report. The CLI now also displays the name of each file on which a repair was attempted. ] { hunk ./src/allmydata/immutable/filenode.py 146 crr.post_repair_results = prr return crr def _repair_error(f): - # as with mutable repair, I'm not sure if I want to pass - # through a failure or not. TODO + prr = CheckResults(cr.uri, cr.storage_index) + prr.data = copy.deepcopy(cr.data) + prr.set_healthy(False) + prr.set_recoverable(False) + prr.set_needs_rebalancing(False) + crr.post_repair_results = prr + crr.repair_successful = False crr.repair_failure = f hunk ./src/allmydata/immutable/filenode.py 155 - return f + return crr + r = Repairer(self, storage_broker=sb, secret_holder=sh, monitor=monitor) d = r.start() hunk ./src/allmydata/mutable/checker.py 315 self._fill_checker_results(repair_results.servermap, r) self.cr_results.repair_results = repair_results # TODO? def _repair_error(f): - # I'm not sure if I want to pass through a failure or not. + prr = CheckResults(cr.uri, cr.storage_index) + prr.data = copy.deepcopy(cr.data) + prr.set_healthy(False) + prr.set_recoverable(False) + prr.set_needs_rebalancing(False) + self.cr_results.post_repair_results = prr + self.cr_results.repair_successful = False hunk ./src/allmydata/mutable/checker.py 323 - self.cr_results.repair_failure = f # TODO? - #self.cr_results.post_repair_results = ?? - return f + self.cr_results.repair_failure = f d.addCallbacks(_repair_finished, _repair_error) return d hunk ./src/allmydata/scripts/tahoe_check.py 213 self.repairs_attempted += 1 if crr["repair-successful"]: self.repairs_successful += 1 + + path = d["path"] + if not path: + path = [""] + # verbose means also print one line per file if self.verbose: hunk ./src/allmydata/scripts/tahoe_check.py 219 - # verbose means also print one line per file - path = d["path"] - if not path: - path = [""] # we don't seem to have a summary available, so build one if was_healthy: summary = "healthy" hunk ./src/allmydata/scripts/tahoe_check.py 224 else: summary = "not healthy" + print >>stdout, "%s: %s" % (quote_path(path), summary) # always print out corrupt shares hunk ./src/allmydata/scripts/tahoe_check.py 236 # always print out repairs if crr["repair-attempted"]: if crr["repair-successful"]: - print >>stdout, " repair successful" + print >>stdout, "%s repair successful" % quote_path(path) else: hunk ./src/allmydata/scripts/tahoe_check.py 238 - print >>stdout, " repair failed" + print >>stdout, "%s repair failed" % quote_path(path) def done(self): if self.in_error: hunk ./src/allmydata/test/test_deepcheck.py 894 d.addCallback(self.do_deepcheck) d.addCallback(self.do_deepcheck_broken) d.addCallback(self.do_test_web_bad) + d.addCallback(self.do_web_stream_check) d.addErrback(self.explain_web_error) d.addErrback(self.explain_error) return d hunk ./src/allmydata/test/test_deepcheck.py 1210 d.addCallback(lambda ign: _checkv("large-corrupt-shares", self.json_has_corrupt_shares)) d.addCallback(lambda ign: _checkv("large-unrecoverable", self.json_is_unrecoverable)) + return d + + def do_web_stream_check(self, ignored): + d = self.web(self.root, method="POST", t="stream-deep-check", + repair="true", output="json") + + def _check((res, ign)): + units = list(self.parse_streamed_json(res)) + assert units[-1]["type"] == "stats" + stats = units[-1]["stats"] + + self.failUnlessEqual(stats['count-files'], 8) + + repairs = 0 + for i in range(0, stats['count-files']): + results = units[i]['check-and-repair-results'] + presults = results['pre-repair-results']['results'] + + if presults['healthy']: + self.failUnlessEqual(results['repair-attempted'], False) + else: + # Enough shares are available for repair + if presults['count-shares-good'] >= presults['count-shares-needed']: + self.failUnlessEqual(results['repair-attempted'], True) + self.failUnlessEqual(results['repair-successful'], True) + repairs += 1 + else: + self.failUnlessEqual(results['repair-attempted'], True) + self.failUnlessEqual(results['repair-successful'], False) + self.failUnlessEqual(repairs, 2) hunk ./src/allmydata/test/test_deepcheck.py 1241 + d.addCallback(_check) return d class Large(DeepCheckBase, unittest.TestCase): hunk ./src/allmydata/test/test_repairer.py 401 download_to_data, self.c1_filenode)) d.addCallback(lambda ignored: - self.shouldFail(NotEnoughSharesError, "then_repair", - None, - self.c1_filenode.check_and_repair, - Monitor(), verify=False)) + self.c1_filenode.check_and_repair(Monitor(), verify=False)) # test share corruption def _test_corrupt(ignored): } Context: [docs: NEWS: add #1255 zooko@zooko.com**20101120071249 Ignore-this: d37ac1a115f6cdebc3dadb32131b6141 ] [docs: NEWS: put news items about bugfixes/improvements and packaging before news items about documentation zooko@zooko.com**20101120060716 Ignore-this: 1a4306df950fcdc2ab9771c874d6d0a4 ] [tahoe_mv.py: when checking success of the DELETE operation, look at the status code from DELETE rather than from the previous PUT. fixes #1255 david-sarah@jacaranda.org**20101110010916 Ignore-this: 4e07b1b51036d68ed28ee3424faa4d2a ] [test_cli.py: test that 'tahoe mv' reports errors from the DELETE operation. refs #1255 david-sarah@jacaranda.org**20101112014653 Ignore-this: b498a4b185bcb309754052cdcdc3c187 ] [bundled zetuptoolz: prefer locally-available distributions over remotely-downloaded distributions above all zooko@zooko.com**20101117082657 Ignore-this: d349c06187191f7acef970a1d7939c12 This fixes #1233. Actually the previous patches—[20101103034740-93fa1-9df33552497282eb72a84e5b434d035974bf2dbb] and [20101117080828-92b7f-dc0239f30b26e7e5d40b228114fb399c1e190ec5]—fixed it, but with them zetuptoolz would download a higher-numbered distribution from the net instead of using the locally-available (fake) pycryptopp-0.5.24, thus preventing the tests from passing. This patch changes that behavior (which is an improvement in its own right) and also fixes a bug in the tests. ] [bundled zetuptoolz: choose a binary dist in preference to a source dist, even if the latter is newer, as long as the former satisfies the requirement zooko@zooko.com**20101117080828 Ignore-this: fa1cb6b23bc20ff60bca80d74d0c64d4 patch by David-Sarah, tiny bugfix to patch by Zooko ref: #1233 ] [bundled zetuptools: prefer platform-specific dists to platform-independent ones. refs #1233 david-sarah@jacaranda.org**20101103034740 Ignore-this: dad21647659e5f1f821355dc73dc33b5 ] [misc: gen-package-table: show only the highest-numbered package for each platform and each library zooko@zooko.com**20101120053905 Ignore-this: 38771b1d0b6050034ea82e5d2d75684a ] [tests: test-with-fake-dists: clean up *just* the pycryptopp-0.5.24 eggs when exiting zooko@zooko.com**20101118063109 Ignore-this: 1d2a35d9dec7e7c9264e51632c14ffce also don't set the PATH and PYTHONPATH, which is unnecessary for this test also wrap the behavior in a couple of functions, just for tidiness ] [setup: show-tool-versions: include the version of valgrind zooko@zooko.com**20101118030623 Ignore-this: 4b52e050468de1b89c6fb8b88f7a537a ] [setup: clean up fake pycryptopp distribution after test-with-fake-dists.py created it zooko@zooko.com**20101117093249 Ignore-this: b8aedca9cd492846f0248491125e1d5f ] [tests: test-with-fake-dists.py has the side-effect of injecting a fake package into ./support, so after that test rm -rf ./support, and likewise with ./pycryptopp*.egg. zooko@zooko.com**20101117090100 Ignore-this: acd63867b5f291127b54d80439e836f5 ] [setup: when testing, set the __requires__ as precisely as possible even if the version of this particular build of Tahoe-LAFS is not yet known (addresses test failure ref #1190, #1233) zooko@zooko.com**20101119074043 Ignore-this: 9bde8af892bbc966357eaec2f4ebb578 ] [tests: change test-with-fake-pkg to exercise a test suite which actually requires pycryptopp, thus making this a better test which can detect ill-installed pycryptopp zooko@zooko.com**20101118072334 Ignore-this: 750f432d3acedde244ef1ed7ebd77158 ] [tests: bump up the timeout on test_dirnode.Dirnode from 240s to 480s since it apparently took longer than 240s just now on François's ARM buildslave zooko@zooko.com**20101115092119 Ignore-this: e3e45c663386fe208eeedbccb2872aca ] [setup: remove --multi-version zooko@zooko.com**20101115090048 Ignore-this: 235bbe0d5645091d56db3b1414fd50b0 It causes copious scary-looking warning messages and I'm no longer sure if it was actually needed to accomplish our goals ref #530. ] [misc/build_helpers/gen-package-table.py: put 'n/a' in table entries for pywin32 on non-Windows platforms. Also remove some dead code. refs #1247 david-sarah@jacaranda.org**20101114193558 Ignore-this: 50c07d1cef22b6f6511ccfa539aa3afc ] [test_cli.py: fix a stale comment that incorrectly implied that test_cli runs CLI commands in subprocesses (it actually runs them using deferToThread). david-sarah@jacaranda.org**20101110022819 Ignore-this: 903b03121061d5b7185ff6333dac7bd4 ] [setup: include pycryptopp in the set of Python packages described in the show-tool-versions step (for cross-referencing with the test-with-fake-dists step, which behaves differently depending on what version(s) of pycryptopp are already present before it starts) zooko@zooko.com**20101114100540 Ignore-this: fd01732d1757e80f4a311ba2d38c5e3d ] [setup: gen-package-table.py -- Python packages can have . in their name zooko@zooko.com**20101114082643 Ignore-this: c42cd92da320375d2dd72018ad6c1d0b ] [setup: upgrade bundled version of darcsver to 1.7.1 to regain compatibility with Python 2.4 zooko@zooko.com**20101114082620 Ignore-this: 9bc9dd064e239003c1a94f1ba409ac96 ] [setup: specify that the version file must go into src/allmydata/_version.py . fixes #1259 zooko@zooko.com**20101114074040 Ignore-this: 9d5c58bc7faed738570b4b8529b129d5 ] [setup: upgrade bundled darcsver from 1.6.3 to 1.7.0 zooko@zooko.com**20101114073954 Ignore-this: 1f930652a20d818d44c0cb863856dad5 ref #1259, we're going to use its 'versionfiles' setup() keyword argument to specify where to write the version file. Remember, we have to bundle darcsver to work-around http://bitbucket.org/tarek/distribute/issue/55/revision-control-plugin-automatically-installed-as-a-build-dependency-is-not-present-when-another-build-dependency-is-being ] [setup: David-Sarah's new gen-package-table.py plus my patch to put the newer versions of Python first zooko@zooko.com**20101114073532 Ignore-this: 249c4db261a1deb14749ef778f1f7c7a fixes #1247 ] [setup: test whether the build system prefers binary dists which are new enough over source dists which are even newer zooko@zooko.com**20101113152822 Ignore-this: d56b67475aec5a7aa901dba7bc59083c ref: #1233 ] [tahoe_mv.py: use do_http, not urllib.openurl, in order to avoid connecting to the webapi server via a proxy. refs #1253 david-sarah@jacaranda.org**20101110005336 Ignore-this: 418b9a1c7873250a35592d3463506540 ] [test_system.py: test for 'tahoe mv' with the http_proxy and HTTP_PROXY variables set. refs #1253 david-sarah@jacaranda.org**20101110033649 Ignore-this: a75557ba7589352768d227e2cd37299e ] [docs: NEWS: merge two additions zooko@zooko.com**20101111055851 Ignore-this: 13105496bb418ebbd570ba68ef347f2 ] [setup: remove separate licensing declaration zooko@zooko.com**20101111044530 Ignore-this: 2992189602af3ef0a420a1b7273f6344 Whenever Free Software/Open Source legal folks are examining the Tahoe-LAFS source code, it seems like there has to be a discussion and documentation about every single licensing declaration. Since this one is (was) permissive, then you would think it could be avoided, but I'm not betting on it. We would probably have to install a copy of the MIT licence into every one of the "copyright" files under the debian/ subdirectory, for example. So: let's just let hashbasedsig.py be licensed the same way as the rest of Tahoe-LAFS. ] [docs: fix error in .rst formatting introduced by renaming Tahoe to Tahoe-LAFS in a header zooko@zooko.com**20101111044344 Ignore-this: 6f6823891dd22d99e38ebeb9aa57b298 ] [docs: NEWS: refs #1253 zooko@zooko.com**20101111044118 Ignore-this: 23d1cfbd2d43a68ca496958b55e4688f ] [docs: added permissions to avoid licence-incompatibility with other Free/Open Source licences zooko@zooko.com**20101111043926 Ignore-this: 190cff2d0f9e910072bc0705e5e9844c ] [test_client.py: change overzealous use of failUnlessReallyEqual on integers back to failUnlessEqual. david-sarah@jacaranda.org**20101109230816 Ignore-this: 6488663c0c9212f548f8b498c42c9d30 ] [misc/build_helpers/show-tool-versions.py: look for zetuptoolz egg in the current directory, not the parent. david-sarah@jacaranda.org**20101107233615 Ignore-this: 6e7081a69584d07d5c38fc9de6749254 ] [misc/build_helpers/show-tool-versions.py: if we can't import pkg_resources, insert the bundled zetuptoolz egg onto sys.path. david-sarah@jacaranda.org**20101106234404 Ignore-this: adb1bd5800129a6c9596f89620146f85 ] [setup.py: fix a bug in the check for whether we are running 'trial' or 'test', that affected zooko's test for #1233. refs #1233 david-sarah@jacaranda.org**20101105235415 Ignore-this: bc79517853f39301218d7d840de830f2 ] [misc/build_helpers/gen-package-table.py: allow all lowercase letters except 'w' (for example, 'c' and 'dev') in package versions. david-sarah@jacaranda.org**20101105154756 Ignore-this: 1189fad2b0d210e2f827bb710f532f7e ] [misc/build_helpers/run_trial.py: minor refactoring -- make variable names consistent between run_trial.py and test_runner.py david-sarah@jacaranda.org**20101104012027 Ignore-this: 443fb127ad39015fb2d82bd1beacfa66 ] [NEWS: entry for #1242 (tilde expansion in 'tahoe backup --exclude-from'). refs #1242 david-sarah@jacaranda.org**20101104011915 Ignore-this: 1c85e7c74f5a48b4cdae5aa073c6b9fb ] [setup: fix gen-package-table to allow the "_r$REV" version numbers of packages zooko@zooko.com**20101104073944 Ignore-this: b6b72b0d2a207929d4ffb0cfc988e8ee ] [misc/build_helpers/gen-package-table.py: fix missing 'r's (meant to delete CRs :-) david-sarah@jacaranda.org**20101103043718 Ignore-this: ffa25a18637b6165725a49a79bfa6cc ] [add misc/build_helpers/gen-package-table.py. refs #1247 david-sarah@jacaranda.org**20101103043328 Ignore-this: 3185c869d98d6fecbae4bcc6b74a810d ] [tests: make test-with-fake-pkg's unacceptably-old fake pycryptopp be 0.5.13 instead of 0.5.17, since 0.5.17 is acceptably new on non-x86 archs zooko@zooko.com**20101102053357 Ignore-this: a400f6f73c7574f2b2266547b0e7b051 Also move the fakepkgs directory to be in misc/build_helpers/ instead of in the base of the source tree. ] [test_runner.py: fix test failure in test_the_right_code after applying zooko's change to test-with-fake-pkg.py david-sarah@jacaranda.org**20101102035905 Ignore-this: 71b467615ae7dcdfbf84049e60a08933 ] [setup: FreeStorm's WinXP-x86-py2.6 buildslave has informed us that there is yet a fourth way to spell "i386" in Python zooko@zooko.com**20101101052142 Ignore-this: 732892975c19f7fd18caeb071f09ef7 ] [setup: add platform.machine() to show-tool-versions, because FreeStorm WinXP builder apparently thinks that its platform.machine() is not one of ['i386', 'x86_64', 'amd64', ''], since it is requiring pycryptopp >= 0.5.14 instead of pycryptopp >= 0.5.20 zooko@zooko.com**20101101042721 Ignore-this: 322a3e5af9785ebca3452f3937ce47a4 ] [edit docs for English usage, rename "Tahoe" to "Tahoe-LAFS" in docs/configuration.rst, rename a variable in bin/tahoe-script.template for clarity, update François's CREDITS entry zooko@zooko.com**20101101042602 Ignore-this: d192c4c9660b1b9173db19d0e533dc22 ] [allmydata/__init__.py: move the call to require_auto_deps() to the top again, since the [4784] patch turned out not to be the cause of the failure on the 'mm netbsd5' buildslave. david-sarah@jacaranda.org**20101101003316 Ignore-this: 879a5188ff2529fb755b6e594c59aeb2 ] [allmydata/__init__.py: put the _auto_deps.require_auto_deps() call back in exactly the same place it was prior to [4784]. david-sarah@jacaranda.org**20101031174649 Ignore-this: c5f4fbb2c444d7b05b1d30a199b6178f ] [allmydata/__init__.py: suppress a DeprecationWarning for the sha module on importing pycrypto. david-sarah@jacaranda.org**20101031160636 Ignore-this: 414d55a0da432cfb0d65329a88e13396 ] [misc/build_helpers/run_trial.py: fix another typo in last patch. david-sarah@jacaranda.org**20101031160332 Ignore-this: 61131c5775a2393b6862f76b7bc222f ] [misc/build_helpers/run_trial.py: fix typo in last patch. david-sarah@jacaranda.org**20101031155215 Ignore-this: a2fbecf858c0a399e938d4f1ade7329b ] [allmydata/__init__.py: call require_auto_deps() after importing nevow and twisted, reverting change in [4784]. Also fix a missing 'warnings.filters.pop()'. david-sarah@jacaranda.org**20101031153828 Ignore-this: 8a5cd7798674d56868e9c333a77a4ac2 ] [misc/build_helpers/run_trial.py: fix false positive on directory check that can occur when running run_trial from test-with-fake-pkg manually. david-sarah@jacaranda.org**20101031153613 Ignore-this: 7d4a0758a305cbfdd296570a9c1a88d2 ] [allmydata.__init__.py: temporary hack to debug failure on midnightmagic's buildslave david-sarah@jacaranda.org**20101031055003 Ignore-this: 2ac28b2f19a436a374399b4c59d29cc7 ] [NEWS: entries for #1190 and #1212, and minor cleanups. refs #1190, #1212 david-sarah@jacaranda.org**20101031051426 Ignore-this: c318dff69296ae1e1a897752b5221870 ] [tahoe backup: perform tilde expansion in exclude-from filename (version 2). fixes #1241 david-sarah@jacaranda.org**20101031035231 Ignore-this: 65e6cd2247dd8d1fc025758d740708c0 ] [NEWS: add news entry for #1223 Francois Deppierraz **20101030111130 Ignore-this: 6b6afd4b0f0527a3c9784c1db95d083 ] [NEWS: add a NEWS entry about bug #1045 Francois Deppierraz **20101030101351 Ignore-this: 7e758afbbd0f1d22a5d0b4fc38661c1d ] [setup: run require_auto_deps() before attempting to import any deps in __init__.py zooko@zooko.com**20101030081035 Ignore-this: ffcaf2450628543e020e9919e455f691 For one thing, this makes missing-dependency failures into DistributionNotFound errors instead of ImportErrors, which might be more useful to the user. For another thing, if someone is using distributions that were installed with --multi-version, then they might be not importable until after require_auto_deps() has been run. (The docs claim that this would be the case, but we don't have an example of this happening at this time.) ] [setup: show-tool-versions: emit module and __version__ information even when module name != distribution (package) name, and add TwistedCore, TwistedWeb, and TwistedConch zooko@zooko.com**20101030070233 Ignore-this: 3df19910090d44502ddeeef5d9c29a7 ] [misc/build_helpers/test-with-fake-pkg.py: look for eggs in the parent of the src directory. refs #1190 david-sarah@jacaranda.org**20101030034303 Ignore-this: 4a3cf286272cdb5d06aac15fb5998b33 ] [scripts/runner.py: fix unused import of allmydata. refs #1190 david-sarah@jacaranda.org**20101030003149 Ignore-this: b2fc67f6192ea7ccf8a5ad010ce74a64 ] [scripts/runner.py: remove pkg_resources.require() calls. These are at best redundant because we have already called _auto_deps.require_auto_deps() (from allmydata.__init__) at that point, and they are causing failure of the test-from-prefixdir step on some buildslaves. refs #1190 david-sarah@jacaranda.org**20101029235328 Ignore-this: e00dee63acc7b76a5755025d75abf524 ] [misc/build_helpers/run_trial.py: look for zetuptoolz egg in the parent directory, not the cwd of run_trial. refs #1190 david-sarah@jacaranda.org**20101029230329 Ignore-this: 1596fb8c290d1c706f079701b1857db8 ] [bundled zetuptoolz: if __main__.__requires__ exists then do not add packages to the working set if they provide an incompatible version of a package. Also put a complete __requires__ listing the transitive closure of dependencies at the beginning of generated scripts, rather than a shallow __requires__ specifying only the application version. refs #1190 david-sarah@jacaranda.org**20101029223111 Ignore-this: a95f1967884340e53bf3adf90db40cfc ] [setup.py, misc/build_helpers/run_trial.py: use undocumented __requires__ variable to cause setuptools/zetuptoolz to put the correct versions of dependencies on sys.path. Also ensure that run_trial adds the bundled zetuptoolz egg at the start of sys.path if present. Make the source directory comparison work correctly for the test-with-fake-pkg build step. refs #1190 david-sarah@jacaranda.org**20101029222825 Ignore-this: 8b09366eb6ce3d55c7db5239077a0fac ] [test_runner.py: fix error in BinTahoe.test_version_no_noise introduced by last patch. refs #1235 david-sarah@jacaranda.org**20101029221123 Ignore-this: 4bf21ea34768e8e6adf104e56f939fd0 ] [test_runner.py: also allow 'from pkg_resources import load_entry_point' as noise. refs #1235. david-sarah@jacaranda.org**20101029204246 Ignore-this: a47440aa2cdd29ce55ac7c6c7f4bcaf2 ] [test_runner.py: if the only noise is 'UserWarning: Unbuilt egg for setuptools', skip instead of failing the no_noise tests. This version avoids 'any' to be compatible with Python < 2.5. refs #1235. david-sarah@jacaranda.org**20101029191804 Ignore-this: 83ca1543fc9673e664a8eeefe1eba429 ] [NEWS: clarify (strengthen) description of what backdoors.rst declares, and add bugfix entries for 'tahoe cp' and Windows console bugs. refs #1216, #1224, #1232 david-sarah@jacaranda.org**20101028180046 Ignore-this: 1c3eef3cd353b06b6ee00ce87c5ef59a ] [make ResponseCache smarter to avoid memory leaks: don't record timestamps, use DataSpans to merge entries, and clear the cache when we see a new seqnum. refs #1045, #1229 david-sarah@jacaranda.org**20101027043302 Ignore-this: 88fd6fba7f35a2f8af1693b92718f5f3 ] [windows/fixups.py: limit length of string passed in a single call to WriteConsoleW. fixes #1232. david-sarah@jacaranda.org**20101027021636 Ignore-this: fbd99e0d22493974696d37925d97c7d6 ] [scripts/tahoe_backup.py: oops, fix missing import, thanks pyflakes Brian Warner **20101029094223 Ignore-this: 285c35af824935641a5be35c008b080c test_cli.py: hush minor pyflakes complaint ] [mutable/servermap.py: update comment. Closes #1231. Brian Warner **20101029091424 Ignore-this: 80bf854123fc254e097a81b82bdf4990 ] [tahoe_cp.py: Don't call urllib.quote with an Unicode argument, fix #1224 Brian Warner **20101029084520 Ignore-this: 5524722d5e5babbb73ca0969d54967f6 tahoe_backup.py: Fix another (potential) occurrence of calling urllib.quote() with an Unicode parameter ] [fix #1223, crash+inefficiency during repair due to read overrun Brian Warner **20101029082036 Ignore-this: e6aa0295ad254544da3b5cc41b33d862 * repairer (really the uploader) reads beyond end of input file (Uploadable) * new-downloader does not tolerate overreads * uploader does lots of tiny reads (inefficient) This fixes the last two. The uploader still does a single overread at the end of the input file, but now that's ok so we can leave it in place. The uploader now expects the Uploadable to behave like a normal disk file (reading beyond EOF will return less data than was asked for), and now the new-downloadable behaves that way. ] [add misc/build_helpers/test-with-fake-pkg.py. refs #1190 david-sarah@jacaranda.org**20101029025150 Ignore-this: 995f220962708f1bad83092161130f67 ] [startstop_node.py: pyflakes import fix. refs #1190 david-sarah@jacaranda.org**20101028014805 Ignore-this: 369ef5022c8ee5a0d8341af01553bcef ] ['tahoe start': use import+call rather than find+spawn "Brian Warner "**20101027061342 This removes the need to use a locally-built (dependency) bin/twistd, and removes a big chunk of behavior differences between unix and windows. It also happens to resolve the "client node probably started" uncertainty. Might help with #1190, #602, and #71. ] [docs/known_issues.rst: Add section on traffic analysis. Fix URL for current version of file. david-sarah@jacaranda.org**20101024234259 Ignore-this: f3416e79d3bb833f5118da23e85723ad ] [test_mutable.py: add test for ResponseCache memory leak. refs #1045, #1129 david-sarah@jacaranda.org**20101024193409 Ignore-this: 3aee7f0677956cc6deaccb4d5b8e415f ] [test_encodingutil.py: test_argv_to_unicode modified the wrong encoding variable. fixes #1214 david-sarah@jacaranda.org**20101023035810 Ignore-this: e5f1f849931b96939facc53d93ff61c5 ] [docs/running.html: fix missing end-quote, and change frontends/ doc references to .rst. david-sarah@jacaranda.org**20101024171500 Ignore-this: 47c645a6595e1790b1d1adfa71af0e1d ] [docs/running.html: 'tahoe create-client' now creates a node with storage disabled. Also change configuration.txt references to configuration.rst. david-sarah@jacaranda.org**20101024170431 Ignore-this: e5b048055494ba3505bb8a506610681c ] [doc: add explanation of the motivation for the surprising and awkward API to erasure coding zooko@zooko.com**20101015060202 Ignore-this: 428913ff6e1bf5b393deffb1f20b949b ] [setup: catch and log ValueError from locale.getdefaultlocale() in show-tool-versions.py zooko@zooko.com**20101015054440 Ignore-this: 827d91490562c32ed7cf6526dfded773 I got a bug report from Mathias Baert showing that locale.getdefaultlocale() raises an exception on his Mac OS X system. Heh. ] [docs: update how-to-make-a-release doc with a few tweaks from the 1.8.0 process zooko@zooko.com**20101015054413 Ignore-this: ca5e9478531a3393792ae283239549dd ] [docs: update NEWS ref: #1216 zooko@zooko.com**20101015053719 Ignore-this: 2e0b92e4145d667cdf075e64b7965530 ] [docs: fix tab-vs-spaces, make some CLI examples /"literal", wrap some to Brian Warner **20101015060606 Ignore-this: eae08bdf0afb19a2fbf41c31e70a8122 80-cols, remove spurious whitespace. Add rst2html.py rule to Makefile. ] [docs: add Peter Secor, Shawn Willden, and Terrell Russell as signatories to docs/backdoors.rst zooko@zooko.com**20101015053242 Ignore-this: c77adf819d664f673e17c4aaeb353f33 ] [docs: convert all .txt docs to .rst thanks to Ravi Pinjala zooko@zooko.com**20101015052913 Ignore-this: 178a5122423189ecfc45b142314a78ec fixes #1225 ] [docs: add statement on our refusal to insert backdoors zooko@zooko.com**20101006051147 Ignore-this: 644d308319a7b80c4434bdff9760404a ] [setup: add --multi-version to the "setup.py develop" command-line zooko@zooko.com**20101005182350 Ignore-this: 709155cc21caff29826b8d41a8c8d63d fixes #530. I earlier tried this twice (see #530 for history) and then twice rolled it back due to some problems that arose. However, I didn't write down what the problems were in enough detail on the ticket that I can tell today whether those problems are still issues, so here goes the third attempt. (I did write down on the ticket that it would not create site.py or .pth files in the target directory with --multi-version mode, but I didn't explain why *that* was a problem.) ] [setup: use execfile to access _auto_deps.py in its proper location of src/allmydata/ instead of copying it into place when setup.py is executed zooko@zooko.com**20100906055714 Ignore-this: c179b42672d775580afad40121f86812 ] [trivial: M-x whitespace-cleanup zooko@zooko.com**20100903144712 Ignore-this: 1bb764d11ac69b4a35ea091cfb13158a ] [minor: remove unused interface declaration, change allmydata.org to tahoe-lafs.org in email address, fix wording in relnotes.txt zooko@zooko.com**20100930153708 Ignore-this: a452969228afed2774de375e29fa3048 ] [immutable/repairer.py: don't use the default happiness setting when repairing Kevan Carstensen **20100927200102 Ignore-this: bd704d9744b970849da8d46a16b8089a ] [NEWS: note dependency updates to pycryptopp and pycrypto. david-sarah@jacaranda.org**20100924191207 Ignore-this: eeaf5c9c9104f24c450c2ec4482ac1ee ] [TAG allmydata-tahoe-1.8.0 zooko@zooko.com**20100924021631 Ignore-this: 494ca0a885c5e20c883845fc53e7ab5d ] Patch bundle hash: c99af354a5bc2e8a1d266fc6a85e59967f905331