1 patch for repository /home/davidsarah/tahoe/mdmf: Sat Jul 30 00:31:02 BST 2011 david-sarah@jacaranda.org * SFTP: write an error message to standard error for unrecognized shell commands. Change the existing message for shell sessions to be written to standard error, and refactor some duplicated code. Also change the lines of the error messages to end in CRLF, and take into account Kevan's review comments. fixes #1442, #1446 New patches: [SFTP: write an error message to standard error for unrecognized shell commands. Change the existing message for shell sessions to be written to standard error, and refactor some duplicated code. Also change the lines of the error messages to end in CRLF, and take into account Kevan's review comments. fixes #1442, #1446 david-sarah@jacaranda.org**20110729233102 Ignore-this: d2f2bb4664f25007d1602bf7333e2cdd ] { hunk ./src/allmydata/frontends/sftpd.py 1865 if hasattr(protocol, 'transport') and protocol.transport is None: protocol.transport = FakeTransport() # work around Twisted bug - d = defer.succeed(None) - d.addCallback(lambda ign: protocol.write("This server supports only SFTP, not shell sessions.\n")) - d.addCallback(lambda ign: protocol.processEnded(Reason(ProcessTerminated(exitCode=1)))) - return d + return self._unsupported(protocol) def execCommand(self, protocol, cmd): self.log(".execCommand(%r, %r)" % (protocol, cmd), level=OPERATIONAL) hunk ./src/allmydata/frontends/sftpd.py 1875 d = defer.succeed(None) if cmd == "df -P -k /": d.addCallback(lambda ign: protocol.write( - "Filesystem 1024-blocks Used Available Capacity Mounted on\n" - "tahoe 628318530 314159265 314159265 50% /\n")) + "Filesystem 1024-blocks Used Available Capacity Mounted on\r\n" + "tahoe 628318530 314159265 314159265 50% /\r\n")) d.addCallback(lambda ign: protocol.processEnded(Reason(ProcessDone(None)))) else: hunk ./src/allmydata/frontends/sftpd.py 1879 - d.addCallback(lambda ign: protocol.processEnded(Reason(ProcessTerminated(exitCode=1)))) + d.addCallback(lambda ign: self._unsupported(protocol)) + return d + + def _unsupported(self, protocol): + d = defer.succeed(None) + d.addCallback(lambda ign: protocol.errReceived( + "This server supports only the SFTP protocol. It does not support SCP,\r\n" + "interactive shell sessions, or commands other than one needed by sshfs.\r\n")) + d.addCallback(lambda ign: protocol.processEnded(Reason(ProcessTerminated(exitCode=1)))) return d def windowChanged(self, newWindowSize): hunk ./src/allmydata/test/test_sftp.py 1333 test_makeDirectory.timeout = 15 def test_execCommand_and_openShell(self): - class FakeProtocol: + class MockProtocol: def __init__(self): self.output = "" hunk ./src/allmydata/test/test_sftp.py 1336 + self.error = "" self.reason = None hunk ./src/allmydata/test/test_sftp.py 1338 + def write(self, data): hunk ./src/allmydata/test/test_sftp.py 1340 + return self.outReceived(data) + + def outReceived(self, data): self.output += data return defer.succeed(None) hunk ./src/allmydata/test/test_sftp.py 1345 + + def errReceived(self, data): + self.error += data + return defer.succeed(None) + def processEnded(self, reason): self.reason = reason return defer.succeed(None) hunk ./src/allmydata/test/test_sftp.py 1354 + def _lines_end_in_crlf(s): + return s.replace('\r\n', '').find('\n') == -1 and s.endswith('\r\n') + d = self._set_up("execCommand_and_openShell") d.addCallback(lambda ign: conch_interfaces.ISession(self.handler)) hunk ./src/allmydata/test/test_sftp.py 1361 def _exec_df(session): - protocol = FakeProtocol() + protocol = MockProtocol() d2 = session.execCommand(protocol, "df -P -k /") d2.addCallback(lambda ign: self.failUnlessIn("1024-blocks", protocol.output)) hunk ./src/allmydata/test/test_sftp.py 1364 + d2.addCallback(lambda ign: self.failUnless(_lines_end_in_crlf(protocol.output), protocol.output)) + d2.addCallback(lambda ign: self.failUnlessEqual(protocol.error, "")) d2.addCallback(lambda ign: self.failUnless(isinstance(protocol.reason.value, ProcessDone))) d2.addCallback(lambda ign: session.eofReceived()) d2.addCallback(lambda ign: session.closed()) hunk ./src/allmydata/test/test_sftp.py 1372 return d2 d.addCallback(_exec_df) + def _check_unsupported(protocol): + d2 = defer.succeed(None) + d2.addCallback(lambda ign: self.failUnlessEqual(protocol.output, "")) + d2.addCallback(lambda ign: self.failUnlessIn("only the SFTP protocol", protocol.error)) + d2.addCallback(lambda ign: self.failUnless(_lines_end_in_crlf(protocol.error), protocol.error)) + d2.addCallback(lambda ign: self.failUnless(isinstance(protocol.reason.value, ProcessTerminated))) + d2.addCallback(lambda ign: self.failUnlessEqual(protocol.reason.value.exitCode, 1)) + return d2 + d.addCallback(lambda ign: conch_interfaces.ISession(self.handler)) def _exec_error(session): hunk ./src/allmydata/test/test_sftp.py 1383 - protocol = FakeProtocol() + protocol = MockProtocol() d2 = session.execCommand(protocol, "error") d2.addCallback(lambda ign: session.windowChanged(None)) hunk ./src/allmydata/test/test_sftp.py 1386 - d2.addCallback(lambda ign: self.failUnlessEqual("", protocol.output)) - d2.addCallback(lambda ign: self.failUnless(isinstance(protocol.reason.value, ProcessTerminated))) - d2.addCallback(lambda ign: self.failUnlessEqual(protocol.reason.value.exitCode, 1)) + d2.addCallback(lambda ign: _check_unsupported(protocol)) d2.addCallback(lambda ign: session.closed()) return d2 d.addCallback(_exec_error) hunk ./src/allmydata/test/test_sftp.py 1393 d.addCallback(lambda ign: conch_interfaces.ISession(self.handler)) def _openShell(session): - protocol = FakeProtocol() + protocol = MockProtocol() d2 = session.openShell(protocol) hunk ./src/allmydata/test/test_sftp.py 1395 - d2.addCallback(lambda ign: self.failUnlessIn("only SFTP", protocol.output)) - d2.addCallback(lambda ign: self.failUnless(isinstance(protocol.reason.value, ProcessTerminated))) - d2.addCallback(lambda ign: self.failUnlessEqual(protocol.reason.value.exitCode, 1)) + d2.addCallback(lambda ign: _check_unsupported(protocol)) d2.addCallback(lambda ign: session.closed()) return d2 d.addCallback(_openShell) } Context: [Resolve conflict with trunk in src/allmydata/scripts/cli.py. refs #393 david-sarah@jacaranda.org**20110728233303 Ignore-this: 5ea8bfbffd84233d59a97706a12bc0c7 ] [test/test_cli: test CLI's MDMF creation powers Kevan Carstensen **20110617180209 Ignore-this: d4b493b266446b2be3ce3c5f2505577d ] [scripts: teach CLI to make MDMF directories Kevan Carstensen **20110617180137 Ignore-this: 5dc968bd22278033b534a561f230a4f ] [test/test_web: test webapi and WUI for MDMF directory handling Kevan Carstensen **20110617180100 Ignore-this: 63ed7832872fd35eb7319cf6a6f251b ] [web: teach WUI and webapi to create MDMF directories Kevan Carstensen **20110617180019 Ignore-this: 956a60542a26c2d5118085ab9e3c470e ] [Add tests for MDMF directories Kevan Carstensen **20110617175950 Ignore-this: 27882fd4cf827030d7574bd4b2b8cb77 ] [Add MDMF dirnodes Kevan Carstensen **20110617175808 Ignore-this: e7d184ece57b272be0e5a3917cc7642a ] [test: change test fixtures to work with our new extension passing API; add, change, and delete tests as appropriate to reflect the fact that caps without hints are now the exception rather than the norm Kevan Carstensen **20110531012739 Ignore-this: 30ebf79b5f6c17f40fa4385de12070a0 ] [mutable/filenode: pass downloader hints between publisher, MutableFileNode, and MutableFileVersion as convenient Kevan Carstensen **20110531012641 Ignore-this: 672c586891abfa38397bcdf90b64ca72 We still need to work on making this more thorough; i.e., passing hints when other operations change encoding parameters. ] [mutable/servermap: caps imply protocol version, so the servermap doesn't need to tell the filenode what it is anymore. Kevan Carstensen **20110531012557 Ignore-this: 9925f5dde5452db92cdbc4a7d6adf1c1 ] [mutable/publish: tell filenodes about encoding parameters so they can be put in the cap Kevan Carstensen **20110531012447 Ignore-this: cf19f07a6913208a327604457466f2f2 ] [interfaces: working update to interfaces.py for extension handling Kevan Carstensen **20110531012201 Ignore-this: 559c43cbf14eec7ac163ebd00c0b7a36 ] [uri: teach mutable URI objects how to allow other objects to give them extension parameters Kevan Carstensen **20110531012036 Ignore-this: 96c06cee1efe5a92a5ed8d87ca09a7dd ] [web/info.py: Display mutable type information when describing a mutable file Kevan Carstensen **20110515230444 Ignore-this: ce5ad22b494effe6c15e49471fae0d99 ] [web/filenode.py: complain if a PUT is requested with a readonly cap Kevan Carstensen **20110515230421 Ignore-this: e2f05201f3b008e157062ed187eacbb9 ] [test/test_web: add MDMF cap tests Kevan Carstensen **20110515230358 Ignore-this: ace5af3bdc9b65c3f6964c8fe056816 ] [test/test_mutable.py: implement cap type checking Kevan Carstensen **20110515230326 Ignore-this: 64cf51b809605061047c8a1b02f5e212 ] [test/test_mutable.py: write a test for pausing during retrieval, write support structure for that test Kevan Carstensen **20110515230207 Ignore-this: 8884ef3ad5be59dbc870ed14002ac45 ] [test/test_cli: Alter existing MDMF tests to test for MDMF caps Kevan Carstensen **20110515230054 Ignore-this: a90d089e1afb0f261710083c2be6b2fa ] [test/common.py: fix some MDMF-related bugs in common test fixtures Kevan Carstensen **20110515230038 Ignore-this: ab5ffe4789bb5e6ed5f54b91b760bac9 ] [scripts/tahoe_put.py: teach tahoe put about MDMF caps Kevan Carstensen **20110515230008 Ignore-this: 1522f434f651683c924e37251a3c1bfd ] [mutable/retrieve: fix typo in paused check Kevan Carstensen **20110515225946 Ignore-this: a9c7f3bdbab2f8248f8b6a64f574e7c4 ] [nodemaker, mutable/filenode: train nodemaker and filenode to handle MDMF caps Kevan Carstensen **20110501224523 Ignore-this: 1f3b4581eb583e7bb93d234182bda395 ] [uri.py: Add MDMF cap Kevan Carstensen **20110501224249 Ignore-this: a6d1046d33f5cc811c5e8b10af925f33 ] [mutable/layout.py: reorder on-disk format to aput variable-length fields at the end of the share, after a predictably long preamble Kevan Carstensen **20110501224125 Ignore-this: 8b2c5d29b8984dfe675c1a2ada5205cf ] [mutable: use integer division where appropriate Kevan Carstensen **20110307082229 Ignore-this: a8767e89d919c9f2a5d5fef3953d53f9 ] [mutable/filenode: remove incorrect comments about segment boundaries Kevan Carstensen **20110307081713 Ignore-this: 7008644c3d9588815000a86edbf9c568 ] [web: use None instead of False in the case of no offset, use object identity comparison to check whether or not an offset was specified. Kevan Carstensen **20110305010858 Ignore-this: 14b7550ca95ce423c9b0b7f6f14ffd2f ] [tahoe-put: raise UsageError when given a nonsensical mutable type, move option validation code to the option parser. Kevan Carstensen **20110301030807 Ignore-this: 2dc19d8bd741842eff458ca553d0bf2a ] [mutable/publish: account for offsets on segment boundaries. Kevan Carstensen **20110228083327 Ignore-this: c8758a0580fcc15a22c2f8582d758a6b ] [test_mutable.py: add test to exercise fencepost bug warner@lothar.com**20110228021056 Ignore-this: d2f9cf237ce6db42fb250c8ad71a4fc3 ] [mutable/layout: remove references to the salt hash tree. Kevan Carstensen **20110228010637 Ignore-this: b3b2963ba4d0b42c78b6bba219d4deb5 ] [docs/configuration.rst: fix more conflicts between #393 and trunk Kevan Carstensen **20110228003426 Ignore-this: 7917effdeecab00d634a06f1df8fe2cf ] [web: Use the string "replace" to trigger whole-file replacement when processing an offset parameter. Kevan Carstensen **20110227231643 Ignore-this: 5bbf0b90d68efe20d4c531bb98a8321a ] [mutable/filenode: Clean up servermap handling in MutableFileVersion Kevan Carstensen **20110226010433 Ignore-this: 2257c9f65502098789f5ea355b94f130 We want to update the servermap before attempting to modify a file, which we now do. This introduced code duplication, which was addressed by refactoring the servermap update into its own method, and then eliminating duplicate servermap updates throughout the MutableFileVersion. ] [update MDMF code with StorageFarmBroker changes "Brian Warner "**20110221061004 Ignore-this: a693b201d31125b391cebe0412ddd027 ] [resolve more conflicts with current trunk "Brian Warner "**20110221055600 Ignore-this: 77ad038a478dbf5d9b34f7a68159a3e0 ] [mutable/filenode.py: fix create_mutable_file('string') "Brian Warner "**20110221014659 Ignore-this: dc6bdad761089f0199681eeb784f1001 ] [resolve conflicts between 393-MDMF patches and trunk as of 1.8.2 "Brian Warner "**20110220230201 Ignore-this: 9bbf5d26c994e8069202331dcb4cdd95 ] [tests: Kevan Carstensen **20100819003531 Ignore-this: 314e8bbcce532ea4d5d2cecc9f31cca0 - A lot of existing tests relied on aspects of the mutable file implementation that were changed. This patch updates those tests to work with the changes. - This patch also adds tests for new features. ] [mutable/servermap.py: Alter the servermap updater to work with MDMF files Kevan Carstensen **20100819003439 Ignore-this: 7e408303194834bd59a2f27efab3bdb These modifications were basically all to the end of having the servermap updater use the unified MDMF + SDMF read interface whenever possible -- this reduces the complexity of the code, making it easier to read and maintain. To do this, I needed to modify the process of updating the servermap a little bit. To support partial-file updates, I also modified the servermap updater to fetch the block hash trees and certain segments of files while it performed a servermap update (this can be done without adding any new roundtrips because of batch-read functionality that the read proxy has). ] [mutable/retrieve.py: Modify the retrieval process to support MDMF Kevan Carstensen **20100819003409 Ignore-this: c03f4e41aaa0366a9bf44847f2caf9db The logic behind a mutable file download had to be adapted to work with segmented mutable files; this patch performs those adaptations. It also exposes some decoding and decrypting functionality to make partial-file updates a little easier, and supports efficient random-access downloads of parts of an MDMF file. ] [mutable/layout.py and interfaces.py: add MDMF writer and reader Kevan Carstensen **20100819003304 Ignore-this: 44400fec923987b62830da2ed5075fb4 The MDMF writer is responsible for keeping state as plaintext is gradually processed into share data by the upload process. When the upload finishes, it will write all of its share data to a remote server, reporting its status back to the publisher. The MDMF reader is responsible for abstracting an MDMF file as it sits on the grid from the downloader; specifically, by receiving and responding to requests for arbitrary data within the MDMF file. The interfaces.py file has also been modified to contain an interface for the writer. ] [docs: update docs to mention MDMF Kevan Carstensen **20100814225644 Ignore-this: 1c3caa3cd44831007dcfbef297814308 ] [nodemaker.py: Make nodemaker expose a way to create MDMF files Kevan Carstensen **20100819003509 Ignore-this: a6701746d6b992fc07bc0556a2b4a61d ] [mutable/publish.py: Modify the publish process to support MDMF Kevan Carstensen **20100819003342 Ignore-this: 2bb379974927e2e20cff75bae8302d1d The inner workings of the publishing process needed to be reworked to a large extend to cope with segmented mutable files, and to cope with partial-file updates of mutable files. This patch does that. It also introduces wrappers for uploadable data, allowing the use of filehandle-like objects as data sources, in addition to strings. This reduces memory inefficiency when dealing with large files through the webapi, and clarifies update code there. ] [mutable/filenode.py: add versions and partial-file updates to the mutable file node Kevan Carstensen **20100819003231 Ignore-this: b7b5434201fdb9b48f902d7ab25ef45c One of the goals of MDMF as a GSoC project is to lay the groundwork for LDMF, a format that will allow Tahoe-LAFS to deal with and encourage multiple versions of a single cap on the grid. In line with this, there is a now a distinction between an overriding mutable file (which can be thought to correspond to the cap/unique identifier for that mutable file) and versions of the mutable file (which we can download, update, and so on). All download, upload, and modification operations end up happening on a particular version of a mutable file, but there are shortcut methods on the object representing the overriding mutable file that perform these operations on the best version of the mutable file (which is what code should be doing until we have LDMF and better support for other paradigms). Another goal of MDMF was to take advantage of segmentation to give callers more efficient partial file updates or appends. This patch implements methods that do that, too. ] [mutable/checker.py and mutable/repair.py: Modify checker and repairer to work with MDMF Kevan Carstensen **20100819003216 Ignore-this: d3bd3260742be8964877f0a53543b01b The checker and repairer required minimal changes to work with the MDMF modifications made elsewhere. The checker duplicated a lot of the code that was already in the downloader, so I modified the downloader slightly to expose this functionality to the checker and removed the duplicated code. The repairer only required a minor change to deal with data representation. ] [client.py: learn how to create different kinds of mutable files Kevan Carstensen **20100814225711 Ignore-this: 61ff665bc050cba5f58bf2ed779d692b ] [web: Alter the webapi to get along with and take advantage of the MDMF changes Kevan Carstensen **20100814081012 Ignore-this: 96c2ed4e4a9f450fb84db5d711d10bd6 The main benefit that the webapi gets from MDMF, at least initially, is the ability to do a streaming download of an MDMF mutable file. It also exposes a way (through the PUT verb) to append to or otherwise modify (in-place) an MDMF mutable file. ] [scripts: tell 'tahoe put' about MDMF Kevan Carstensen **20100813234957 Ignore-this: c106b3384fc676bd3c0fb466d2a52b1b ] [immutable/literal.py: implement the same interfaces as other filenodes Kevan Carstensen **20100810000633 Ignore-this: b50dd5df2d34ecd6477b8499a27aef13 ] [immutable/filenode.py: Make the immutable file node implement the same interfaces as the mutable one Kevan Carstensen **20100810000619 Ignore-this: 93e536c0f8efb705310f13ff64621527 ] [frontends/sftpd.py: Modify the sftp frontend to work with the MDMF changes Kevan Carstensen **20100809233535 Ignore-this: 2d25e2cfcd0d7bbcbba660c7e1da12f ] [interfaces.py: Add #993 interfaces Kevan Carstensen **20100809233244 Ignore-this: b58621ac5cc86f1b4b4149f9e6c6a1ce ] [src/allmydata/scripts/cli.py: fix pyflakes warning. david-sarah@jacaranda.org**20110728021402 Ignore-this: 94050140ddb99865295973f49927c509 ] [Fix the help synopses of CLI commands to include [options] in the right place. fixes #1359, fixes #636 david-sarah@jacaranda.org**20110724225440 Ignore-this: 2a8e488a5f63dabfa9db9efd83768a5 ] [encodingutil: argv and output encodings are always the same on all platforms. Lose the unnecessary generality of them being different. fixes #1120 david-sarah@jacaranda.org**20110629185356 Ignore-this: 5ebacbe6903dfa83ffd3ff8436a97787 ] [docs/man/tahoe.1: add man page. fixes #1420 david-sarah@jacaranda.org**20110724171728 Ignore-this: fc7601ec7f25494288d6141d0ae0004c ] [Update the dependency on zope.interface to fix an incompatiblity between Nevow and zope.interface 3.6.4. fixes #1435 david-sarah@jacaranda.org**20110721234941 Ignore-this: 2ff3fcfc030fca1a4d4c7f1fed0f2aa9 ] [frontends/ftpd.py: remove the check for IWriteFile.close since we're now guaranteed to be using Twisted >= 10.1 which has it. david-sarah@jacaranda.org**20110722000320 Ignore-this: 55cd558b791526113db3f83c00ec328a ] [Update the dependency on Twisted to >= 10.1. This allows us to simplify some documentation: it's no longer necessary to install pywin32 on Windows, or apply a patch to Twisted in order to use the FTP frontend. fixes #1274, #1438. refs #1429 david-sarah@jacaranda.org**20110721233658 Ignore-this: 81b41745477163c9b39c0b59db91cc62 ] [misc/build_helpers/run_trial.py: undo change to block pywin32 (it didn't work because run_trial.py is no longer used). refs #1334 david-sarah@jacaranda.org**20110722035402 Ignore-this: 5d03f544c4154f088e26c7107494bf39 ] [misc/build_helpers/run_trial.py: ensure that pywin32 is not on the sys.path when running the test suite. Includes some temporary debugging printouts that will be removed. refs #1334 david-sarah@jacaranda.org**20110722024907 Ignore-this: 5141a9f83a4085ed4ca21f0bbb20bb9c ] [docs/running.rst: use 'tahoe run ~/.tahoe' instead of 'tahoe run' (the default is the current directory, unlike 'tahoe start'). david-sarah@jacaranda.org**20110718005949 Ignore-this: 81837fbce073e93d88a3e7ae3122458c ] [docs/running.rst: say to put the introducer.furl in tahoe.cfg. david-sarah@jacaranda.org**20110717194315 Ignore-this: 954cc4c08e413e8c62685d58ff3e11f3 ] [README.txt: say that quickstart.rst is in the docs directory. david-sarah@jacaranda.org**20110717192400 Ignore-this: bc6d35a85c496b77dbef7570677ea42a ] [setup: remove the dependency on foolscap's "secure_connections" extra, add a dependency on pyOpenSSL zooko@zooko.com**20110717114226 Ignore-this: df222120d41447ce4102616921626c82 fixes #1383 ] [test_sftp.py cleanup: remove a redundant definition of failUnlessReallyEqual. david-sarah@jacaranda.org**20110716181813 Ignore-this: 50113380b368c573f07ac6fe2eb1e97f ] [docs: add missing link in NEWS.rst zooko@zooko.com**20110712153307 Ignore-this: be7b7eb81c03700b739daa1027d72b35 ] [contrib: remove the contributed fuse modules and the entire contrib/ directory, which is now empty zooko@zooko.com**20110712153229 Ignore-this: 723c4f9e2211027c79d711715d972c5 Also remove a couple of vestigial references to figleaf, which is long gone. fixes #1409 (remove contrib/fuse) ] [add Protovis.js-based download-status timeline visualization Brian Warner **20110629222606 Ignore-this: 477ccef5c51b30e246f5b6e04ab4a127 provide status overlap info on the webapi t=json output, add decode/decrypt rate tooltips, add zoomin/zoomout buttons ] [add more download-status data, fix tests Brian Warner **20110629222555 Ignore-this: e9e0b7e0163f1e95858aa646b9b17b8c ] [prepare for viz: improve DownloadStatus events Brian Warner **20110629222542 Ignore-this: 16d0bde6b734bb501aa6f1174b2b57be consolidate IDownloadStatusHandlingConsumer stuff into DownloadNode ] [docs: fix error in crypto specification that was noticed by Taylor R Campbell zooko@zooko.com**20110629185711 Ignore-this: b921ed60c1c8ba3c390737fbcbe47a67 ] [setup.py: don't make bin/tahoe.pyscript executable. fixes #1347 david-sarah@jacaranda.org**20110130235809 Ignore-this: 3454c8b5d9c2c77ace03de3ef2d9398a ] [Makefile: remove targets relating to 'setup.py check_auto_deps' which no longer exists. fixes #1345 david-sarah@jacaranda.org**20110626054124 Ignore-this: abb864427a1b91bd10d5132b4589fd90 ] [Makefile: add 'make check' as an alias for 'make test'. Also remove an unnecessary dependency of 'test' on 'build' and 'src/allmydata/_version.py'. fixes #1344 david-sarah@jacaranda.org**20110623205528 Ignore-this: c63e23146c39195de52fb17c7c49b2da ] [Rename test_package_initialization.py to (much shorter) test_import.py . Brian Warner **20110611190234 Ignore-this: 3eb3dbac73600eeff5cfa6b65d65822 The former name was making my 'ls' listings hard to read, by forcing them down to just two columns. ] [tests: fix tests to accomodate [20110611153758-92b7f-0ba5e4726fb6318dac28fb762a6512a003f4c430] zooko@zooko.com**20110611163741 Ignore-this: 64073a5f39e7937e8e5e1314c1a302d1 Apparently none of the two authors (stercor, terrell), three reviewers (warner, davidsarah, terrell), or one committer (me) actually ran the tests. This is presumably due to #20. fixes #1412 ] [wui: right-align the size column in the WUI zooko@zooko.com**20110611153758 Ignore-this: 492bdaf4373c96f59f90581c7daf7cd7 Thanks to Ted "stercor" Rolle Jr. and Terrell Russell. fixes #1412 ] [docs: three minor fixes zooko@zooko.com**20110610121656 Ignore-this: fec96579eb95aceb2ad5fc01a814c8a2 CREDITS for arc for stats tweak fix link to .zip file in quickstart.rst (thanks to ChosenOne for noticing) English usage tweak ] [docs/running.rst: fix stray HTML (not .rst) link noticed by ChosenOne. david-sarah@jacaranda.org**20110609223719 Ignore-this: fc50ac9c94792dcac6f1067df8ac0d4a ] [server.py: get_latencies now reports percentiles _only_ if there are sufficient observations for the interpretation of the percentile to be unambiguous. wilcoxjg@gmail.com**20110527120135 Ignore-this: 2e7029764bffc60e26f471d7c2b6611e interfaces.py: modified the return type of RIStatsProvider.get_stats to allow for None as a return value NEWS.rst, stats.py: documentation of change to get_latencies stats.rst: now documents percentile modification in get_latencies test_storage.py: test_latencies now expects None in output categories that contain too few samples for the associated percentile to be unambiguously reported. fixes #1392 ] [docs: revert link in relnotes.txt from NEWS.rst to NEWS, since the former did not exist at revision 5000. david-sarah@jacaranda.org**20110517011214 Ignore-this: 6a5be6e70241e3ec0575641f64343df7 ] [docs: convert NEWS to NEWS.rst and change all references to it. david-sarah@jacaranda.org**20110517010255 Ignore-this: a820b93ea10577c77e9c8206dbfe770d ] [docs: remove out-of-date docs/testgrid/introducer.furl and containing directory. fixes #1404 david-sarah@jacaranda.org**20110512140559 Ignore-this: 784548fc5367fac5450df1c46890876d ] [scripts/common.py: don't assume that the default alias is always 'tahoe' (it is, but the API of get_alias doesn't say so). refs #1342 david-sarah@jacaranda.org**20110130164923 Ignore-this: a271e77ce81d84bb4c43645b891d92eb ] [setup: don't catch all Exception from check_requirement(), but only PackagingError and ImportError zooko@zooko.com**20110128142006 Ignore-this: 57d4bc9298b711e4bc9dc832c75295de I noticed this because I had accidentally inserted a bug which caused AssertionError to be raised from check_requirement(). ] [M-x whitespace-cleanup zooko@zooko.com**20110510193653 Ignore-this: dea02f831298c0f65ad096960e7df5c7 ] [docs: fix typo in running.rst, thanks to arch_o_median zooko@zooko.com**20110510193633 Ignore-this: ca06de166a46abbc61140513918e79e8 ] [relnotes.txt: don't claim to work on Cygwin (which has been untested for some time). refs #1342 david-sarah@jacaranda.org**20110204204902 Ignore-this: 85ef118a48453d93fa4cddc32d65b25b ] [relnotes.txt: forseeable -> foreseeable. refs #1342 david-sarah@jacaranda.org**20110204204116 Ignore-this: 746debc4d82f4031ebf75ab4031b3a9 ] [replace remaining .html docs with .rst docs zooko@zooko.com**20110510191650 Ignore-this: d557d960a986d4ac8216d1677d236399 Remove install.html (long since deprecated). Also replace some obsolete references to install.html with references to quickstart.rst. Fix some broken internal references within docs/historical/historical_known_issues.txt. Thanks to Ravi Pinjala and Patrick McDonald. refs #1227 ] [docs: FTP-and-SFTP.rst: fix a minor error and update the information about which version of Twisted fixes #1297 zooko@zooko.com**20110428055232 Ignore-this: b63cfb4ebdbe32fb3b5f885255db4d39 ] [munin tahoe_files plugin: fix incorrect file count francois@ctrlaltdel.ch**20110428055312 Ignore-this: 334ba49a0bbd93b4a7b06a25697aba34 fixes #1391 ] [corrected "k must never be smaller than N" to "k must never be greater than N" secorp@allmydata.org**20110425010308 Ignore-this: 233129505d6c70860087f22541805eac ] [Fix a test failure in test_package_initialization on Python 2.4.x due to exceptions being stringified differently than in later versions of Python. refs #1389 david-sarah@jacaranda.org**20110411190738 Ignore-this: 7847d26bc117c328c679f08a7baee519 ] [tests: add test for including the ImportError message and traceback entry in the summary of errors from importing dependencies. refs #1389 david-sarah@jacaranda.org**20110410155844 Ignore-this: fbecdbeb0d06a0f875fe8d4030aabafa ] [allmydata/__init__.py: preserve the message and last traceback entry (file, line number, function, and source line) of ImportErrors in the package versions string. fixes #1389 david-sarah@jacaranda.org**20110410155705 Ignore-this: 2f87b8b327906cf8bfca9440a0904900 ] [remove unused variable detected by pyflakes zooko@zooko.com**20110407172231 Ignore-this: 7344652d5e0720af822070d91f03daf9 ] [allmydata/__init__.py: Nicer reporting of unparseable version numbers in dependencies. fixes #1388 david-sarah@jacaranda.org**20110401202750 Ignore-this: 9c6bd599259d2405e1caadbb3e0d8c7f ] [update FTP-and-SFTP.rst: the necessary patch is included in Twisted-10.1 Brian Warner **20110325232511 Ignore-this: d5307faa6900f143193bfbe14e0f01a ] [control.py: remove all uses of s.get_serverid() warner@lothar.com**20110227011203 Ignore-this: f80a787953bd7fa3d40e828bde00e855 ] [web: remove some uses of s.get_serverid(), not all warner@lothar.com**20110227011159 Ignore-this: a9347d9cf6436537a47edc6efde9f8be ] [immutable/downloader/fetcher.py: remove all get_serverid() calls warner@lothar.com**20110227011156 Ignore-this: fb5ef018ade1749348b546ec24f7f09a ] [immutable/downloader/fetcher.py: fix diversity bug in server-response handling warner@lothar.com**20110227011153 Ignore-this: bcd62232c9159371ae8a16ff63d22c1b When blocks terminate (either COMPLETE or CORRUPT/DEAD/BADSEGNUM), the _shares_from_server dict was being popped incorrectly (using shnum as the index instead of serverid). I'm still thinking through the consequences of this bug. It was probably benign and really hard to detect. I think it would cause us to incorrectly believe that we're pulling too many shares from a server, and thus prefer a different server rather than asking for a second share from the first server. The diversity code is intended to spread out the number of shares simultaneously being requested from each server, but with this bug, it might be spreading out the total number of shares requested at all, not just simultaneously. (note that SegmentFetcher is scoped to a single segment, so the effect doesn't last very long). ] [immutable/downloader/share.py: reduce get_serverid(), one left, update ext deps warner@lothar.com**20110227011150 Ignore-this: d8d56dd8e7b280792b40105e13664554 test_download.py: create+check MyShare instances better, make sure they share Server objects, now that finder.py cares ] [immutable/downloader/finder.py: reduce use of get_serverid(), one left warner@lothar.com**20110227011146 Ignore-this: 5785be173b491ae8a78faf5142892020 ] [immutable/offloaded.py: reduce use of get_serverid() a bit more warner@lothar.com**20110227011142 Ignore-this: b48acc1b2ae1b311da7f3ba4ffba38f ] [immutable/upload.py: reduce use of get_serverid() warner@lothar.com**20110227011138 Ignore-this: ffdd7ff32bca890782119a6e9f1495f6 ] [immutable/checker.py: remove some uses of s.get_serverid(), not all warner@lothar.com**20110227011134 Ignore-this: e480a37efa9e94e8016d826c492f626e ] [add remaining get_* methods to storage_client.Server, NoNetworkServer, and warner@lothar.com**20110227011132 Ignore-this: 6078279ddf42b179996a4b53bee8c421 MockIServer stubs ] [upload.py: rearrange _make_trackers a bit, no behavior changes warner@lothar.com**20110227011128 Ignore-this: 296d4819e2af452b107177aef6ebb40f ] [happinessutil.py: finally rename merge_peers to merge_servers warner@lothar.com**20110227011124 Ignore-this: c8cd381fea1dd888899cb71e4f86de6e ] [test_upload.py: factor out FakeServerTracker warner@lothar.com**20110227011120 Ignore-this: 6c182cba90e908221099472cc159325b ] [test_upload.py: server-vs-tracker cleanup warner@lothar.com**20110227011115 Ignore-this: 2915133be1a3ba456e8603885437e03 ] [happinessutil.py: server-vs-tracker cleanup warner@lothar.com**20110227011111 Ignore-this: b856c84033562d7d718cae7cb01085a9 ] [upload.py: more tracker-vs-server cleanup warner@lothar.com**20110227011107 Ignore-this: bb75ed2afef55e47c085b35def2de315 ] [upload.py: fix var names to avoid confusion between 'trackers' and 'servers' warner@lothar.com**20110227011103 Ignore-this: 5d5e3415b7d2732d92f42413c25d205d ] [refactor: s/peer/server/ in immutable/upload, happinessutil.py, test_upload warner@lothar.com**20110227011100 Ignore-this: 7ea858755cbe5896ac212a925840fe68 No behavioral changes, just updating variable/method names and log messages. The effects outside these three files should be minimal: some exception messages changed (to say "server" instead of "peer"), and some internal class names were changed. A few things still use "peer" to minimize external changes, like UploadResults.timings["peer_selection"] and happinessutil.merge_peers, which can be changed later. ] [storage_client.py: clean up test_add_server/test_add_descriptor, remove .test_servers warner@lothar.com**20110227011056 Ignore-this: efad933e78179d3d5fdcd6d1ef2b19cc ] [test_client.py, upload.py:: remove KiB/MiB/etc constants, and other dead code warner@lothar.com**20110227011051 Ignore-this: dc83c5794c2afc4f81e592f689c0dc2d ] [test: increase timeout on a network test because Francois's ARM machine hit that timeout zooko@zooko.com**20110317165909 Ignore-this: 380c345cdcbd196268ca5b65664ac85b I'm skeptical that the test was proceeding correctly but ran out of time. It seems more likely that it had gotten hung. But if we raise the timeout to an even more extravagant number then we can be even more certain that the test was never going to finish. ] [docs/configuration.rst: add a "Frontend Configuration" section Brian Warner **20110222014323 Ignore-this: 657018aa501fe4f0efef9851628444ca this points to docs/frontends/*.rst, which were previously underlinked ] [web/filenode.py: avoid calling req.finish() on closed HTTP connections. Closes #1366 "Brian Warner "**20110221061544 Ignore-this: 799d4de19933f2309b3c0c19a63bb888 ] [Add unit tests for cross_check_pkg_resources_versus_import, and a regression test for ref #1355. This requires a little refactoring to make it testable. david-sarah@jacaranda.org**20110221015817 Ignore-this: 51d181698f8c20d3aca58b057e9c475a ] [allmydata/__init__.py: .name was used in place of the correct .__name__ when printing an exception. Also, robustify string formatting by using %r instead of %s in some places. fixes #1355. david-sarah@jacaranda.org**20110221020125 Ignore-this: b0744ed58f161bf188e037bad077fc48 ] [Refactor StorageFarmBroker handling of servers Brian Warner **20110221015804 Ignore-this: 842144ed92f5717699b8f580eab32a51 Pass around IServer instance instead of (peerid, rref) tuple. Replace "descriptor" with "server". Other replacements: get_all_servers -> get_connected_servers/get_known_servers get_servers_for_index -> get_servers_for_psi (now returns IServers) This change still needs to be pushed further down: lots of code is now getting the IServer and then distributing (peerid, rref) internally. Instead, it ought to distribute the IServer internally and delay extracting a serverid or rref until the last moment. no_network.py was updated to retain parallelism. ] [TAG allmydata-tahoe-1.8.2 warner@lothar.com**20110131020101] Patch bundle hash: 5c91cd26a8438dc743cebd72eee4011160933295