1 patch for repository tahoe-lafs.org:/home/source/darcs/tahoe-lafs/trunk:

Sun Jun 17 01:21:25 BST 2012  david-sarah@jacaranda.org
  * _auto_deps.py: bump the Twisted dependency to >= 11.0.0 to avoid Twisted bugs #411 (Deferred recursion limit) and #4395 (SSH server rekeying). refs #1297 fixes #1771

New patches:

[_auto_deps.py: bump the Twisted dependency to >= 11.0.0 to avoid Twisted bugs #411 (Deferred recursion limit) and #4395 (SSH server rekeying). refs #1297 fixes #1771
david-sarah@jacaranda.org**20120617002125
 Ignore-this: 967826d03c85ce6cd3c91a2238235f1e
] hunk ./src/allmydata/_auto_deps.py 25
     # frontend.
     # We also need Twisted 10.1 for the FTP frontend in order for Twisted's FTP server to
     # support asynchronous close.
-    "Twisted >= 10.1.0",
+    # When the cloud backend lands, it will depend on Twisted 10.2.0 which includes the fix to
+    # https://twistedmatrix.com/trac/ticket/411
+    # The SFTP frontend depends on Twisted 11.0.0 to fix the SSH server rekeying bug
+    # http://twistedmatrix.com/trac/ticket/4395
+    "Twisted >= 11.0.0",
 
     # foolscap < 0.5.1 had a performance bug which spent
     # O(N**2) CPU for transferring large mutable files

Context:

[Make the intent of the loop over servers in test_system.Connections.test_rref clearer, and able to be the same in 1.9.2 and trunk. Remove the now-unused node_key_s attribute of Client. refs #1636
david-sarah@jacaranda.org**20120616181844
 Ignore-this: b0a769470bc18fd3c45db2f5549bb4ff
] 
[Skip allmydata.test.test_system.Connections.test_rref unless we have foolscap >= 0.6.4, because of http://foolscap.lothar.com/trac/ticket/196 . refs #1636
david-sarah@jacaranda.org**20120615232028
 Ignore-this: 5fdebd85a84b602f44beee9e8b860616
] 
[Fix a bug in mutable publish that could cause an IndexError when a writer is removed in Publish._connection_problem. This version uses DictOfSets as suggested by warner. fixes #1749
david-sarah@jacaranda.org**20120615034437
 Ignore-this: 367a37d0fff03c5339296a854ea23e35
] 
[After a server disconnects, make the IServer retain the dead RemoteReference, and continue to return it to anyone who calls get_rref(). This removes the need for callers to guard against receiving a None (as long as the server was connected at least once, which is always the case for servers returned by get_servers_for_psi(), which is how all upload/download code gets servers). Includes test. fixes #1636
david-sarah@jacaranda.org**20120615014855
 Ignore-this: 55e671d9b7d2fcb45f2249b647e89364
] 
[Since DeprecationWarning about twisted.internet.interfaces.IFinishableConsumer is suppressed globally, it doesn't need to be suppressed during import. refs #1295
david-sarah@jacaranda.org**20120614213315
 Ignore-this: 2a0cded7cab6052e348a3af6d46d0d7a
] 
[misc/coding_tools/check-interfaces.py: clean-ups (warnings about Windows-specific modules and error stream handling).
david-sarah@jacaranda.org**20120614212829
 Ignore-this: 2033d237517525bfdf998a597bc13d13
] 
[Suppress DeprecationWarning about twisted.internet.interfaces.IFinishableConsumer. This also unifies the handling of DeprecationWarnings that need to be suppressed globally. refs #1295
david-sarah@jacaranda.org**20120614212308
 Ignore-this: 44ef1c807f0ffd64712755c82d03a19
] 
[test/common.py: fix race condition waiting for the helper connection
Brian Warner <warner@lothar.com>**20120614191835
 Ignore-this: c2fa3608dec9b1337ae557bd34874d97
 
 The wait_for_connections() method, which is used at the start of
 test_system to make sure that all the clients are connected to all the
 servers, did not also wait for clients to be connected to their Helpers.
 Every once in a while, the helper connection would take a bit longer,
 and then
 test_system.SystemTest.test_filesystem._test_web._got_welcome_helper
 would fail, because we'd check for a helper connection before it was
 ready.
 
 The fix is to modify wait_for_connections's polling predicate to look
 for helper connections (if configured) as well as the regular
 introducer- and server- connections.
 
 Tested by temporarily adding a large (30s) delay to the connectTo() call
 in Uploader.startService, simulating a long helper
 connection-establishment delay. This makes the test fail consistently.
 Then I fixed wait_for_connections(), and the test passed (slowly). Then
 I removed the delay.
 
 Closes #1467
] 
[introweb: the Subscribed Clients list shows tubids, not serverids
Brian Warner <warner@lothar.com>**20120612213727
 Ignore-this: a5ff1fd66cfe7b2ee362b7615c8d7ec7
 
 Improve the column headers to make it clear that this list shows Tub
 IDs. (we can't show pubkey-based serverids because clients don't give
 those to us: only servers provide pubkeys). This should be the only
 place in the whole webapi that shows TubIDs for modern (V2-introducer)
 nodes.
] 
[Display serverids consistently as 8-char pubkey, or 6-char tubid.
Brian Warner <warner@lothar.com>**20120612213034
 Ignore-this: 6a6052fc0cd96afbe57b653af3e3c05e
 
 This makes it easy to distinguish between old V1-Introducer
 nodes (identified by their Foolscap TubID) and new V2 nodes (identified
 by their ed25519 pubkey).
 
 This fixes a few places where we used to display a tubid even if we had
 a pubkey, making it hard to visually correlate servers in two different
 displays. It also cleans up the way we pass serverids to the JS-based
 download timeline.
 
 The "introweb" subscribed-clients list still shows tubids.
] 
[test_system.py: wait for the Helper connection properly before uploading
Brian Warner <warner@lothar.com>**20120612061930
 Ignore-this: e34a2cce7250e15000bf7a4c2798ccd2
] 
[test_system.py: clean up control flow, reduce use of stall()
Brian Warner <warner@lothar.com>**20120612012235
 Ignore-this: e1bf1aa9bc981df34cd8e0dafce40041
 
 The _upload_resumable() test interrupts a Helper upload partway
 through (by shutting down the Helper), then restarts the Helper and
 resumes the upload. The control flow is kind of tricky: to do anything
 "partway through" requires adding a hook to the Uploadable. The previous
 flow depended upon a (fragile) call to self.stall(), which waits a fixed
 number of seconds.
 
 This removes one of those stall() calls (the remainder is in
 test/common.py and I'll try removing it in a subsequent revision). It
 also removes some now-redundant wait_for_connections() calls, since
 bounce_client() doesn't fire its Deferred until the client has finished
 coming back up (and uses wait_for_connections() internally to do so).
] 
[test_system.py: fix minor typo
Brian Warner <warner@lothar.com>**20120612011636
 Ignore-this: a7fe88527daa9e6556f9c42d7b7f752e
] 
[offloaded.py: don't drop the Deferred
Brian Warner <warner@lothar.com>**20120612011602
 Ignore-this: fc71d431d616fbbb37946d6d75193485
 
 There was one corner case (where the client disconnects at just the
 wrong time) that could have dropped a Deferred, leading to an Unhandled
 Error. Clean up the control flow to avoid this case.
] 
[Clarify documentation of RIStorageServer.slot_testv_and_readv_and_writev. fixes #1744
david-sarah@jacaranda.org**20120613165135
 Ignore-this: d0fca05f06dd9998140d1031bebf8620
] 
[setup.py and bin/tahoe-script.template: the error when we try to use Python 3 should give the correct minimum Python version (now 2.5). refs #1658
david-sarah@jacaranda.org**20120611035216
 Ignore-this: 148f7fb936eca727c54bbc06e48801d7
] 
[introducer: add sequence-numbers to announcements, ignore replays
Brian Warner <warner@lothar.com>**20120611021022
 Ignore-this: 1f0754837df8e48deb314aeff3eefc34
 
 This will support revocation of Accounting recommendation records,
 assuming the gossip-based broadcast channel isn't easily jammed.
] 
[client.py: rename "server key" to "node key", use old name if present
Brian Warner <warner@lothar.com>**20120611011455
 Ignore-this: cf632b9e6925144027dcd453aa4e3e6e
 
 This prepares for invitation-based reciprocal-permission Accounting. In
 the scheme I'm developing, nodes publish "I accept shares from Y"
 messages, which are assembled into a graph, and server will accept
 shares from any client node reachable in this graph. For this to work,
 the serverX->clientY edge must be connectable to the serverY->clientZ
 edge, which means "clientY" and "serverY" must be connected. If clientY
 and serverY are two distinct keys, they must be cross-signed. Life is
 easier if there's just one key "Y", rather than distinct client- and
 server- keys. Calling this one key "server.privkey" would be confusing.
 "node.privkey" and "node.pubkey" makes more sense.
 
 One-server-per-node is a pretty easy restriction. Originally I was
 thinking that the client.key should be provided in each webapi call,
 just like a filecap is, making a single node useable by multiple users
 (Accounting principals), and not providing any ambient storage
 authority. But I've been unable to think of a comfortable WUI for
 that (at least without requiring javascript), nor a friendly way to
 transfer account authority (e.g. writecaps that include storage
 authority). So I'm more willing to have one-client-per-node these days.
 
 (and note that this rename doesn't seriously preclude
 many-clients-per-node or zero-clients-per-node anyways, it just makes
 one-client-per-node less awkward)
] 
[node.py: add get_private_config()
Brian Warner <warner@lothar.com>**20120611004638
 Ignore-this: 29533aedf4e246efa38cbb9bce5b67b7
 
 Also add tests for this and the pre-existing private-config methods.
] 
[Added docs/specifications/backends/raic.rst for ticket #1760
Brian Warner <warner@lothar.com>**20120610193236
 Ignore-this: 23eb716a368c0e442d8ce4a5bfa95959
] 
[Fix text in Publish Status results. Closes #1762.
Brian Warner <warner@lothar.com>**20120608222146
 Ignore-this: 69690fc03c93e81e1d66efe77940745f
] 
[CheckResults corrupt/incompatible shares now return IServers
Brian Warner <warner@lothar.com>**20120602183912
 Ignore-this: f8edd8ca693813f311cdc05199c1d2ec
 
 DeepResultsBase also has a get_corrupt_shares(), and it is populated
 from CheckResults.get_corrupt_shares(). It has been updated too, along
 with get_remaining_corrupt_shares().
 
 Remove temporary get_new_corrupt_shares() and
 get_new_incompatible_shares().
] 
[CheckResults.get_servers_responding() now returns IServers
Brian Warner <warner@lothar.com>**20120602183912
 Ignore-this: 90d55bae8a231dd89f4addee8cb5f2d8
 
 Remove temporary get_new_servers_responding().
] 
[CheckResults.get_sharemap() now returns IServers
Brian Warner <warner@lothar.com>**20120602183911
 Ignore-this: 535d6a5416628892ca019f9dafe3e8cb
 
 Remove temporary get_new_sharemap().
] 
[CheckResults: pass IServer to corrupt/incompatible share locators
Brian Warner <warner@lothar.com>**20120602183911
 Ignore-this: 11f8930ae6449de33f8d426f70247e8d
 
 Getters still return serverid. Adds temporary get_new_corrupt_shares()
 and get_new_incompatible_shares().
] 
[CheckResults: pass IServer to servers_responding=, getter returns serverid
Brian Warner <warner@lothar.com>**20120602183911
 Ignore-this: c736cf11768bb02633bdabf1612247f4
 
 Add temporary get_new_servers_responding().
] 
[CheckResults: pass IServer to sharemap=, but get_sharemap() returns serverids
Brian Warner <warner@lothar.com>**20120602183911
 Ignore-this: 6a03fd26e5e4e6cddda2cec207ec8ed2
 
 This changes all code which feeds CheckResults(sharemap=) to provide
 IServer instances, but CheckResults converts these to old-style
 serverids during output, so downstream code doesn't have to change yet.
 
 It adds a temporary get_new_sharemap(), which *does* return IServer
 instances, so the immutable repairer can build new CheckResults from an
 old one. This will go away when get_sharemap() is updated to return
 IServer (and downstream code is updated too).
] 
[CheckResults: internal cleanup
Brian Warner <warner@lothar.com>**20120602183911
 Ignore-this: fcd1c6918bae4d5ca09014c29a616307
 
 replace the one-big-dictionary with normal private attributes
] 
[CheckResults: privatize remaining attributes
Brian Warner <warner@lothar.com>**20120602183910
 Ignore-this: a5e08fd7732255dde8634748d447dbe4
] 
[CheckResults: use fat init, add type-checking assertions
Brian Warner <warner@lothar.com>**20120602183910
 Ignore-this: ac6374aa0da3f510e91bd053aa928780
 
 Added assertions for sharemap, servermap, servers_responding,
 list_corrupt_shares, and list_incompatible_shares.
] 
[mutable/checker: refactor to make CheckResults easier to change
Brian Warner <warner@lothar.com>**20120602183910
 Ignore-this: 36dbc39a32fc1d2b0f4361b29535fa3c
] 
[CheckResults: replace get_data() with as_dict(), use getters in web status
Brian Warner <warner@lothar.com>**20120602183910
 Ignore-this: 217a5b3c63762aef5cbe833e2c318640
] 
[use the new CheckResult getters almost everywhere
Brian Warner <warner@lothar.com>**20120602183910
 Ignore-this: b306cdd9f51184b2826759200cd427ae
 
 The remaining get_data() calls are either in
 web.check_results.json_check_results(), or functioning as repr()s in
 various unit test failure cases.
] 
[CheckResults: replace get_data() with a bunch of individual getters
Brian Warner <warner@lothar.com>**20120602183910
 Ignore-this: 2e2c976ee12d487d39386d5782991e0d
] 
[change CheckResults to use a fat set_data()
Brian Warner <warner@lothar.com>**20120602183910
 Ignore-this: 24b940b80173dadbfc70ee803574051d
 
 i.e. change set_data() to accept lots of parameters, instead of taking
 a single dictionary with lots of keys. Also Convert all CheckResults
 creators to use it.
] 
[CheckResults: simplify self._data
Brian Warner <warner@lothar.com>**20120602183909
 Ignore-this: d1fdfb0bcaec56fe0e87c91de87b81a1
] 
[CheckResults: start hiding .data, first step to clean it up
Brian Warner <warner@lothar.com>**20120602183909
 Ignore-this: fdeb1eeeb44f6099cbfdcc80a5060b45
 
 The goal is to make CheckResults more strongly typed, and remove the
 ambiguous ".data" field in favor of a bunch of specific counters and
 sharelists, so I can changes .sharemap and .servermap to use IServer
 instances instead of string serverids. By cleaning this up first, I hope
 to get that task done with less debugging.
] 
[immutable.CiphertextFileNode.check_and_repair: simplify for refactoring
Brian Warner <warner@lothar.com>**20120602183909
 Ignore-this: 28e6a8e8a2d682af4da730908d854143
 
 There were too many nested functions here, making some upcoming changes
 too difficult, so let's refactor it first.
] 
[docs/quickstart.rst: fix rst warning.
david-sarah@jacaranda.org**20120601210104
 Ignore-this: c98d18e2eb028011936ebffd855bf0ea
] 
[node.py: stop stripping whitespace in write_private_config()
Brian Warner <warner@lothar.com>**20120530071755
 Ignore-this: 84fe81a4bab679170dffc3e58992ca83
 
 It's nice to add newlines to the saved file, so 'cat' is easy to use. We
 still strip on the input side, in get_or_create_private_config().
] 
[Restore --rterrors option to 'setup.py test' and 'setup.py trial' to keep buildbots happy. refs #1699
david-sarah@jacaranda.org**20120531222307
 Ignore-this: 62b8798fa0b50441df64f50ed5f9a117
] 
[Change 'setup.py test' and 'setup.py trial' to pass --rterrors to trial by default. Suppress using --no-rterrors. Also pass --until-failure/-u to trial. fixes #1699
david-sarah@jacaranda.org**20120531220000
 Ignore-this: 78bdfcfb1142ed260197996a3c1b22b1
] 
[test_web.py: fix memory leak when run with --until-failure
Brian Warner <warner@lothar.com>**20120522223949
 Ignore-this: 17161fd0629fd86d4112220b13e10094
 
 The Fake*Node classes in test/common.py were accumulating share data in
 a class-level dictionary, which persisted from one test run to the next.
 As a result, running test_web.py over and over (with trial's
 --until-failure feature) made this dictionary grow without bound,
 eventually running out of memory.
 
 This fix moves that dictionary into the FakeClient built fresh for each
 test, so it doesn't build up. It does the same thing for "file_types",
 which was much smaller but still lived at the class level.
 
 Closes #1729
] 
[test/check_memory.py: oops, fix one last ur.uri -> ur.get_uri()
Brian Warner <warner@lothar.com>**20120522155036
 Ignore-this: 1f0361a2f9a28e052e02ad4f11463a2b
] 
[change UploadResults to return IServers, update users to match
Brian Warner <warner@lothar.com>**20120522041837
 Ignore-this: 8f553b4e15a739b10db067840d24d794
 
 This finally changes all callers of get_servermap()/get_sharemap() to
 accept IServers, and changes UploadResults to provide them.
] 
[UploadResults: store IServers internally, but still return serverids
Brian Warner <warner@lothar.com>**20120522041825
 Ignore-this: 50f74032f9c4a0b580950e75d36b9151
 
 This stores IDisplayableServer-providing instances (StubServers or
 NativeStorageServers) in the .servermap and .sharemap dictionaries. But
 get_servermap()/get_sharemap() still return data structures with
 serverids, not IServers, by translating their data on the way out. This
 lets us put off changing the callers for a little bit longer.
] 
[split IDisplayableServer from IServer, add sb.get_stub_server()
Brian Warner <warner@lothar.com>**20120522041727
 Ignore-this: d71a29164f7c1651fb2a75391006dea3
 
 IDisplayableServer includes just enough functionality to call
 .get_name() and friends, which is all that the UploadResults really
 need. IServer is a superset that includes actual share-manipulation
 methods. StubServer instances provide only IDisplayableServer, while
 actual NativeStorageServer instances provide the full IServer interface.
 
 When the Helper sends a serverid (so we know what to call the server but
 nothing else about it, and have no corresponding NativeStorageServer
 object to reference), but we want to store an IDisplayableServer in the
 UploadResults, we create a synthetic StubServer "server" and store that
 instead.
] 
[switch UploadResults to use get_uri(), hide internal ._uri
Brian Warner <warner@lothar.com>**20120522041444
 Ignore-this: 65c9e9fc0ad6f78a782ff11dc834d85c
 
 Complete the getter-based transformation, by hiding ".uri" and updating
 callers to use get_uri(). Also don't set a dummy self._uri, leave it
 undefined until someone calls set_uri().
] 
[switch UploadResults to use getters, hide internal data, for all but .uri
Brian Warner <warner@lothar.com>**20120522041428
 Ignore-this: aa2e8b898d9e3f88a006d46eae109c8
 
 This hides attributes with e.g. _sharemap, and creates getters like
 get_sharemap() to access them, for every field except .uri . This will
 make it easier to modify the internal representation of .sharemap
 without requiring callers to adjust quite yet.
 
 ".uri" has so many users that it seemed better to update it in a
 subsequent patch.
] 
[convert UploadResults to a fat init
Brian Warner <warner@lothar.com>**20120522041414
 Ignore-this: 397e665bb8969b7b98e0217b7b0bbee6
 
 Populate most of UploadResults (except .uri, which is learned later when
 using a Helper) in the constructor, instead of allowing creators to
 write to attributes later. This will help isolate the fields that we
 want to change to use IServers.
] 
[add HelperUploadResults
Brian Warner <warner@lothar.com>**20120522041400
 Ignore-this: b2043a5adb21d47600d5d0a59ac60879
 
 This splits the pb.Copyable on-wire object (HelperUploadResults) out
 from the local results object (UploadResults). To maintain compatibility
 with older Helpers, we have to leave pb.Copyable classes alone and
 unmodified, but we want to change UploadResults to use IServers instead
 of serverids. So by using a different class on the wire, and translating
 to/from it on either end, we can accomplish both.
] 
[Uploader cleanup: create results at end, not beginning
Brian Warner <warner@lothar.com>**20120522041347
 Ignore-this: 82a8a6d0d32f62f2f7a25f8b8545a2f8
 
 This will make it easier to populate the UploadResults during __init__,
 instead of doing it one-field-at-a-time later.
] 
[clean up Helper to make later changes easier
Brian Warner <warner@lothar.com>**20120522041332
 Ignore-this: a7ed4d4d1ebbfd5fb5ae04bb2ae3a75b
 
 Fix up control flow inside the Helper, to make it more friendly for
 later refactoring.
] 
[helper: remove timings["existence_check"], aka "Already-In-Grid Check"
Brian Warner <warner@lothar.com>**20120522041311
 Ignore-this: e0de1fb6a36399135dfc9530e702f669
 
 This measured how long the Helper took to do a filecheck before asking
 for ciphertext. The "Contacting Helper" report includes both
 existence_check and the client-helper RTT.
 
 For non-overlapping uploads, it was being returned correctly. But when
 multiple upload requests overlapped, and the file was not already in the
 grid, the filecheck would only run once, and its existence_check time
 would be reported for all uploaders (even if they didn't have to wait
 for that time). Cleaning that up proved too difficult: the only correct
 place to report this time is from the initial remote_upload_chk() call,
 but the return value of that is too constrained to accomodate it in the
 needs-upload case.
 
 So I'm removing it altogether. Eventually I plan to add a proper
 events/times field and record more data, including this check, in a form
 that can be drawn on a nice zoomable timeline view.
 
 Old clients talking to a new Helper (which doesn't supply the value)
 will tolerate the loss (they'll just display an empty field on the web
 view).
] 
[test_checker: minor improvement in fake-server setup
Brian Warner <warner@lothar.com>**20120522024936
 Ignore-this: e3d22200a1c7b53e856c5899eb80465
 
 This prepares for testing the differences between tubid and pubkey-based
 name/longname.
] 
[Catch exceptions from CLI in order to prevent the Ubuntu crash monolog from triggering. refs #1746
david-sarah@jacaranda.org**20120520153529
 Ignore-this: 1621a76cb85fbb97c241b140557e6d5c
] 
[docs/frontends/FTP-and-SFTP.rst: remove outdated allmydata.com reference. fixes #1743
david-sarah@jacaranda.org**20120518225618
 Ignore-this: a1e38e3f1d2138abd9d32087aeb71b3
] 
[misc/build_helpers/check-interfaces.py: avoid spurious warnings about ignored exceptions on shutdown. Also make the check function able to write errors to an arbitrary stream.
david-sarah@jacaranda.org**20120518021252
 Ignore-this: 7d6b03286d7b1b4a726ff06f2c07f8c6
] 
[dictutil.DictOfSets: remove .union() method, it was misleading
Brian Warner <warner@lothar.com>**20120516235509
 Ignore-this: ede3d11bf6de0d01f57b8bd85ff2da22
 
 Unlike set.union(), which returns a new set, DictOfSets.union() modified
 the DictOfSets in-place. The name collision bit me when I changed some
 code from using DictOfSets to a normal set, and expected that
 set.union() would modify the set in-place. Since there was only one user
 of DictOfSets.union, I figured it was safer to just get rid of it.
] 
[immutable repairer: populate servers-responding properly
Brian Warner <warner@lothar.com>**20120516235509
 Ignore-this: d840f7dc056fa7efeaad1dd3f1c707c6
 
 If a server did not respond to the pre-repair filecheck, but did respond
 to the repair, that server was not correctly added to the
 RepairResults.data["servers-responding"] list. (This resulted from a
 buggy usage of DictOfSets.union() in filenode.py).
 
 In addition, servers to which filecheck queries were sent, but did not
 respond, were incorrectly added to the servers-responding list
 anyawys. (This resulted from code in the checker.py not paying attention
 to the 'responded' flag).
 
 The first bug was neatly masked by the second: it's pretty rare to have
 a server suddenly start responding in the one-second window between a
 filecheck and a subsequent repair, and if the server was around for the
 filecheck, you'd never notice the problem. I only spotted the smelly
 code while I was changing it for IServer cleanup purposes.
 
 I added coverage to test_repairer.py for this. Trying to get that test
 to fail before fixing the first bug is what led me to discover the
 second bug. I also had to update test_corrupt_file_verno, since it was
 incorrectly asserting that 10 servers responded, when in fact one of
 them throws an error (but the second bug was causing it to be reported
 anyways).
] 
[Update my (davidsarah) gpg fingerprint in CREDITS. Mwahaha! :-)
david-sarah@jacaranda.org**20120516231526
 Ignore-this: e65336db38ff2227e3d2cce8a31aa397
] 
[fileutil.py: use try/finally to close file in write_atomically.
david-sarah@jacaranda.org**20120516230839
 Ignore-this: 6bd8cfcedc26ec03acf72334fe0e1ce6
] 
[write node.url and portnum files atomically, to fix race in test_runner
Brian Warner <warner@lothar.com>**20120514220314
 Ignore-this: 57eea88ec0efef779769632d43329362
 
 Previously, test_runner sometimes fails because the _node_has_started()
 poller fires after the portnum file has been opened, but before it has
 actually been filled, allowing the test process to observe an empty file,
 which flunks the test.
 
 This adds a new fileutil.write_atomically() function (using the usual
 write-to-.tmp-then-rename approach), and uses it for both node.url and
 client.port . These files are written a bit before the node is really up and
 running, but they're late enough for test_runner's purposes, which is to know
 when it's safe to read client.port and use 'tahoe restart' (and therefore
 SIGINT) to restart the node.
 
 The current node/client code doesn't offer any better "are you really done
 with startup" indicator.. the ideal approach would be to either watch the
 logfile, or connect to its flogport, but both are a hassle. Changing the node
 to write out a new "all done" file would be intrusive for regular
 operations.
] 
[Change logging.rst to address warner's review comment. refs #1693
david-sarah@jacaranda.org**20120516221329
 Ignore-this: d578a002b5a0fa117b51981346168148
] 
[Since we now require Python 2.5, we can use os.SEEK_END.
david-sarah@jacaranda.org**20120516213948
 Ignore-this: cd9ecbb0c48d79cc7acc5bd27cb99d50
] 
[Simplifications resulting from requiring Python 2.5 and therefore being able to use sqlite3 from the standard library. This also drops sqlite3 from the set of versions and paths we report.
david-sarah@jacaranda.org**20120516024725
 Ignore-this: c9161f1a95caa85a638aee893361f2cf
] 
[Require Python 2.5.
david-sarah@jacaranda.org**20120516024149
 Ignore-this: 640715ce841a7a3af92027810baf9e3
] 
[Improve a comment in __init__.py.
david-sarah@jacaranda.org**20120514163431
 Ignore-this: bbdce3d50dce46e497eba71f9146079e
] 
[Suppress the PowmInsecureWarning from PyCrypto. refs #1586
david-sarah@jacaranda.org**20120514032352
 Ignore-this: 9cfd6936bc31e320d1ea9d52a495dbaa
] 
[Clarify an ambiguity about which version number is meant in quickstart.rst.
david-sarah@jacaranda.org**20120514002637
 Ignore-this: afac742bcfb4aba9021b07e7505d4de0
] 
[performance.rst: small updates, mention (lack of) MDMF
Brian Warner <warner@lothar.com>**20120513210739
 Ignore-this: 8c8beb98b6be5f6b4697cf507798957f
 
 refs #1398
] 
[CREDITS: add amiller, zooko, rearrange a bit
Brian Warner <warner@lothar.com>**20120513173217
 Ignore-this: 4db3b71cdaf52e1596532ac9133186ae
] 
[Doc updates and cosmetic fixes for #1115 patch.
Brian Warner <warner@lothar.com>**20120513081550
 Ignore-this: 87721ec10d0aee1124f2f24bdaea3007
 
 Removes the caveat from webapi.txt about count-good-share-hosts being wrong.
 
 This series should close #1115.
] 
[Fixed an error in previous commit where an empty servermap would throw an exception in 'count-good-share-hosts'. Augmented unit test.
Brian Warner <warner@lothar.com>**20120513075930
 Ignore-this: 8c8937b3b3e15c63d9386628493f394e
 
 Signed-off-by: Andrew Miller <amiller@dappervision.com>
] 
[Added tests for count-good-share-hosts under check and repair conditions. Patched the incorrect computation in immutable/filenode.py
Brian Warner <warner@lothar.com>**20120513075930
 Ignore-this: 6a77a5058adf18bca0a3517a77cf6190
 
 Signed-off-by: Andrew Miller <amiller@dappervision.com>
 
 Fixed missing import statements
 
 Signed-off-by: Andrew Miller <amiller@dappervision.com>
] 
[test_web: fix use of headers= that's been wrong for a while
Brian Warner <warner@lothar.com>**20120513074512
 Ignore-this: 681e1ac6eafd23a0babfe8f182e3ca8
] 
[webapi: don't allow ETags in t=info or t=rename-form, both are variable
Brian Warner <warner@lothar.com>**20120513074511
 Ignore-this: 40387e1534c9a5c202280d604eddfdcc
 
 t=info contains randomly-generated ophandles, and t=rename-form contains the
 name of the child being renamed, so neither is eligible for a
 short-circuiting ETag. Enhanced test_web to exercise this. Had to improve
 FakeCHKFileNode slightly to let it participate. Refs #443.
] 
[test_web: improve ETag tests, add If-None-Match test
Brian Warner <warner@lothar.com>**20120513074511
 Ignore-this: 72702e3237430441a4c98a084ae63df4
] 
[Added unit tests covering #466:comment-15. Refactored the 'etag' behavior for immutable files to respond to all GET '?t=' flags, not just t=None
Brian Warner <warner@lothar.com>**20120513074511
 Ignore-this: fc3ba31b5678c08752b60fa3dd77fa83
 
 Signed-off-by: Andrew Miller <amiller@dappervision.com>
] 
[Short circuit GET on ETags match
Brian Warner <warner@lothar.com>**20120513074511
 Ignore-this: 33d540fbc702c6b43e30d957107ba0b4
 
 When client does a conditional GET/HEAD with If-none-match:, if the condition
 fails (ie, the client's ETag matches the file's) then we can short-circuit
 the whole process and immediately return an empty body.
] 
[Add ETags for immutable directories
Brian Warner <warner@lothar.com>**20120513074511
 Ignore-this: b173e8a1219e5fe906d49edc006da993
 
 Like immutable files, the ETag is based on the storage index. However, since
 a directory is a special interpretation of a file, it is distinguished from
 the file by prepending "DIR:" onto the start of the ETag, and adding
 -representation on the end (where -representation is the ?t= argument, json,
 info, etc).
 
 It also checks the return of setETag and avoids generating a representation
 if the client already has it.
] 
[test-dont-use-too-old-dep.py: fix tarfile timestamps
Brian Warner <warner@lothar.com>**20120513063403
 Ignore-this: b7acb8e369d768e072f3658b2de9af03
 
 It turns out that TarFile.addfile() doesn't provide a reasonable default
 timestamp, resulting in files dated to 1970 (they're probably wearing
 bell-bottoms and listening to disco too). Then, when the bdist_egg command
 tries to create a *zip*file with those files, it explodes because zipfiles
 cannot handle timestamps before 1980 (it prefers boomboxes and jackets with
 straps on the shoulders, thank you very much).
 
 This puts a modern time.time() on the members of the tarfile, allowing future
 cryptocoderarchaeologists the opportunity to make fun of fashion trends from
 the user's chosen era, rather than an artificially older one.
 
 refs #1342
] 
[Add 'tahoe debug flogtool' command, test for --help, and docs. This version gets the help synopses more correct, and changes the doc to say that this command is added in 1.10.0 rather than 1.9.2. fixes #1693
david-sarah@jacaranda.org**20120331224122
 Ignore-this: 9c2bc2f7b684323515690d658060c3fc
] 
[modify build_helpers files
Brian Warner <warner@lothar.com>**20120513034724
 Ignore-this: 7f02472b3fbc2bfba4c02acce7d728e7
 
 Should close #1342. This makes the actual changes to the two test
 files (separated from the 'rename' patch to avoid VC complications).
] 
[rename build_helpers files
Brian Warner <warner@lothar.com>**20120513034701
 Ignore-this: c1e7257dc66d0d35dcbc830fbe04ab9b
 
 This is from the darcs patch for #1342, which failed to apply on my darcs
 tree, so I'm landing it from git. I'm landing the rename-files part
 separately from the modify-those-files part to avoid VC complications.
] 
[webapi: remove undocumented t=mkdir-p operation
Brian Warner <warner@lothar.com>**20120513021943
 Ignore-this: 10bc56cc8bef468881fc7dd5a586bdf9
 
 Closes #380
] 
[Improve webapi t=move docs.
Brian Warner <warner@lothar.com>**20120509234653
 Ignore-this: a9342b5cef162c12efec04e2d21ec777
] 
[webui: merge 'move' form with 'rename' form
Brian Warner <warner@lothar.com>**20120509212137
 Ignore-this: a073958075eb1d041546f68342ec2ba2
] 
[test_web: improve shouldFail2() error reporting
Brian Warner <warner@lothar.com>**20120509211837
 Ignore-this: 2ab6738d46fead5b49496ba379fd1d98
] 
[webapi 'move'-button cleanups
Brian Warner <warner@lothar.com>**20120509211827
 Ignore-this: dc3bfe40150969222923f0abcf0ad691
 
 test_web.py: use shouldFail2(), safer than old shouldFail()
 directory.py: forbid slashes in from_name=, return BAD_REQUEST instead of
               GONE when trying to move into a non-directory
] 
[Add unit test for moving a directory
Brian Warner <warner@lothar.com>**20120509200714
 Ignore-this: a915d7ddf007abf8b7d69c8e441d21dd
 
 My gut tells me this case sould be tested. The rename suite tests it, so
 move's will too.
] 
[Change the arbitrary URI support from implied to explicit
Brian Warner <warner@lothar.com>**20120509200714
 Ignore-this: 1117c90c8f5ea4e4155d3f0ac50e50d9
 
 The move webapi function now takes a target_type argument which lets it
 know whether the target is a subdirectory name or URI. This is an
 improvement over the old system in which the move handler tried to guess
 whether the target was a name or a URI. Also fixed a little docs
 copypaste problem and tweaked some line wrapping.
] 
[Adding 'move' button to web UI, closes #1579
Brian Warner <warner@lothar.com>**20120509200713
 Ignore-this: d58ce02d31c0683c6859065b8c36f5d6
 
 This adds "move file" capability to the web UI's directory display. The
 support and test framework is heavily based on the similar "rename file"
 feature. Unit tests and documentation are included. Multiple in-progress
 versions of this patch may be found in ticket 1579. This version
 includes arbitrary URI target support and is compatible with the change
 from tahoe_css to tahoe.css.
] 
[CREDITS: lebek
zooko@zooko.com**20120503173033
 Ignore-this: 6c0ff786ce67697f7af7b861593992e3
] 
[Make sure that foolscap.logging.log.setLogDir is called with a str (not unicode) path, v2. Includes test. fixes #1725
david-sarah@jacaranda.org**20120429022844
 Ignore-this: 1e94ed0c092c5c93c0a4031f8b8df092
] 
[introweb announcements: show serverid, not tubid
Brian Warner <warner@lothar.com>**20120424053728
 Ignore-this: 4de5d89b06f4f067ec23f879582fdfaa
 
 'serverid' is the pubkey (for V2 clients), falling back to the tubid (for V1
 clients). This also required cleaning up the way the index is created for the
 old V1 introducer.
] 
[Fix introweb display for mixed V1/V2 clients. Closes #1721.
Brian Warner <warner@lothar.com>**20120423223053
 Ignore-this: 766a34730dfce5b2d8c4ee1a411f50fb
 
 This significantly cleans up the IntroducerServer web-status renderers.
 Instead of poking around in the introducer's internals, now the web-status
 renderers get clean AnnouncementDescriptor and SubscriberDescriptor
 objects. They are still somewhat foolscap-centric, but will provide a clean
 abstraction boundary for future improvements.
 
 The specific #1721 bug was that old (V1) subscribers were handled by
 wrapping their RemoteReference in a special WrapV1SubscriberInV2Interface
 object, but the web-status display was trying to peek inside the object to
 learn what host+port it was associated with, and the wrapper did not proxy
 those extra attributes.
 
 A test was added to test_introducer to make sure the introweb page renders
 properly and at least contains the nicknames of both the V1 and V2 clients.
] 
[Updated webapi.rst to list /cap as a synonym for /uri
Brian Warner <warner@lothar.com>**20120417184111
 Ignore-this: c7dfb12987d883c94948f3fede254fe4
] 
[Adding jg71 to CREDITS
markus reichelt <mr@mareichelt.com>**20120414140107
 Ignore-this: b69a4c4b5248a7092c550de395192afb
] 
[Fix for ticket #1662
Brian Warner <warner@lothar.com>**20120410183314
 Ignore-this: b2164418fb1a24cef2bddf1ec3c42eed
] 
[docs/frontends/drop-upload.rst: document more known issues and link to new ticket for an existing one.
david-sarah@jacaranda.org**20120406043946
 Ignore-this: 72e0a821961fb9137bb6f53742e4ba43
] 
[test/common.py: remove ununsed 'is_bad' mechanism
Brian Warner <warner@lothar.com>**20120404191103
 Ignore-this: 15b5d8d66e8ee902831b8171a9069763
 
 This was a premature feature addition to the mock filenode, and gets in the
 way of the IServer refactoring I'm trying to do. Best to remove it now and
 re-introduce it in a better form later when it's actually needed.
] 
[checker.py: minor simplifications
Brian Warner <warner@lothar.com>**20120404190531
 Ignore-this: 170f3e70dccd61c1ddb6ea6995ad09ca
] 
[make IServer instances retain identity in copy() and deepcopy()
Brian Warner <warner@lothar.com>**20120404181409
 Ignore-this: ff39267d0e967cc76591ba5166f63fc7
] 
[move IServer from storage_client.py to interfaces.py
Brian Warner <warner@lothar.com>**20120404181359
 Ignore-this: 7713ad62faa2841659ce5ed287d0837b
] 
[Change capitalization of WUI and introducer welcome page headings; add test for introducer welcome page. Also fix a typo in a CSS class name. fixes #1708
david-sarah@jacaranda.org**20120405235723
 Ignore-this: 9b0055847a793528a028679847ab493c
] 
[Rename web CheckResults to -Renderer, to avoid confusion. Closes #1705.
Brian Warner <warner@lothar.com>**20120403030451
 Ignore-this: 4c3e20d804e70a27d2464f770aec0c2c
 
 This avoids the name collision between the actual results
 objects (defined in allmydata.check_results) and the code that renders
 these objects into HTML (defined in allmydata.web.check_results). Only
 the web-side objects were renamed.
] 
[webapi.rst: de-tabify
Brian Warner <warner@lothar.com>**20120402233205
 Ignore-this: 6436168d9073b12e95ff410239bf133f
] 
[servermap.py: oops, fix _done() condition, good catch by davidsarah
Brian Warner <warner@lothar.com>**20120401221034
 Ignore-this: a5b0f61d83606ebf3493917e69ad4edf
] 
[doc: cross-link known_issues.rst and cautions.rst with one another
zooko@zooko.com**20120401214039
 Ignore-this: 3873f8807826cb21761cfe65a93955f8
] 
[docs: FTP-and-SFTP.rst: recommend SFTP
zooko@zooko.com**20120401212002
 Ignore-this: 6459edd6dd0a62a82d3adc62c5656c63
 
 Add an explicit recommendation of SFTP over FTP. Separate the known issues of
 FTP from SFTP. List "SFTP" first in all lists of the two. Use unicode bullet
 points and prepend a utf-8 BOM. Use out-of-line rst hyperlinks.
 
] 
[interfaces.py: ensure that NoSuchChildError can be converted to str even when it is for a non-ASCII name. fixes #1483
david-sarah@jacaranda.org**20110814225959
 Ignore-this: d0069952ac7f5a13bdf5e957c7ae78a8
] 
[misc/build_helpers/show-tool-versions.py: s/print_stderr/print_stdout/
david-sarah@jacaranda.org**20120401022826
 Ignore-this: c69d01081308a8144c9fdb34c4ab40b0
] 
[bin/tahoe-script.template: fix the error message that is displayed when a runner script cannot be found. fixes #1488
david-sarah@jacaranda.org**20110817222651
 Ignore-this: b92c562e4da9adf63e642512c96eee89
] 
[docs: quickstart: edits
zooko@zooko.com**20120401015717
 Ignore-this: cb56a1ffedb20d687133ad2ecfd7f8f7
 
 • use out-of-line links to avoid a warning from rst2html --verbose (fixes #1704)
 • reflow to 77 fill-column and prepend utf-8 BOM (fixes #1703)
 • recommend Python 2.7 (fixes #1702)
 • remove link to wiki:AdvancedInstall (fixes #1701)
 
] 
[Spelling error in a comment.
david-sarah@jacaranda.org**20120401013655
 Ignore-this: 3a5a30be4be27bcfb1fecfd22ccf5327
] 
[test_node.py: test that we tolerate a UTF-8 BOM at the start of tahoe.cfg, and can read UTF-8 option values. refs #1470
david-sarah@jacaranda.org**20110808180552
 Ignore-this: b4dd630857d192c02acaa6d8b163d5ca
] 
[node.py: tolerate a UTF-8 BOM at the start of tahoe.cfg. fixes #1470
david-sarah@jacaranda.org**20110808180204
 Ignore-this: 9c859adce5668d7315d0d6e2ed9ddca7
] 
[mutable/layout.py: improve confusing documentation of layout. fixes #1534
david-sarah@jacaranda.org**20110914143947
 Ignore-this: c5fbd3809ee3f7fc2b46cd23dad6b1c0
] 
[setup: show-tool-versions: report cl only on windows, report buildslave, git, openssl, and lzip, but not 7za
zooko@zooko.com**20120401005925
 Ignore-this: 2f8d90893271d2f1c2d1185f95d95e86
] 
[Document PYTHONPATH problem when running flogtool. refs #1693
david-sarah@jacaranda.org**20120331223934
 Ignore-this: 3edb13077119aaee76c1dcc46370e62
] 
[Mutable repair: use new MODE_REPAIR to query all servers *and* get privkey
Brian Warner <warner@lothar.com>**20120331183902
 Ignore-this: e518c5372afe27331e09f8d70c63764d
 
 This fixes bug #1689. Repair was using MODE_READ to build the servermap,
 which doesn't try hard enough to grab the privkey, and also doesn't guarantee
 sending queries to all servers. This patch adds a new MODE_REPAIR which does
 both, and does a separate, distinct mapupdate to start wth repair cycle,
 instead of relying upon the (MODE_CHECK) mapupdate leftover from the
 filecheck that triggered the repair.
] 
[Add test for bug #1689: repairing empty file hits no-privkey assertion
Brian Warner <warner@lothar.com>**20120331183902
 Ignore-this: e84ead8eb2bfee9c65285b7f9a3a9237
] 
[FTP-and-SFTP.rst: there were two more instances of 'rootcap'. Also made the wording tweak from ticket:1487#comment:4 . fixes #1487
david-sarah@jacaranda.org**20120331023247
 Ignore-this: 9ce9c37d9aa2b9629b14a001989d51b0
] 
[test_ftp.py: fix a couple of unused imports. refs #1668
david-sarah@jacaranda.org**20120331021725
 Ignore-this: fc4f24fbc707efe86de9f35b782384ce
] 
[FTP-and-SFTP.rst: directories containing mutable files should now be listable via FTP. refs #680
david-sarah@jacaranda.org**20120331013730
 Ignore-this: 78e507bd857623e78b32dd0e4da3c59
] 
[ftpd file `size' attribute must be an integer
Peter Le Bek <peter@hyperplex.net>**20120322131806
 Ignore-this: bcf0047f19226e8dc00cb4995584761a
] 
[unit test for ftpd LIST
Peter Le Bek <peter@hyperplex.net>**20120330234139
 Ignore-this: dfbb45a030be9840858df6047f21666c
] 
[fix ftpd mtime retrieval
Peter Le Bek <peter@hyperplex.net>**20120330234119
 Ignore-this: 873cf8d1c28817d7e64565dda43a2ecb
] 
[test_introducer.SystemTest: fix race condition
Brian Warner <warner@lothar.com>**20120331002906
 Ignore-this: d5cec29c09aca766634b6332c798436f
 
 SystemTest has a couple of different phases, separated by a poller which
 waits for everything to be idle (all messages delivered, none in flight). It
 does this by watching some internal "_debug_outstanding" counters in the
 server and in each client, and waiting for them to hit zero.
 
 Just before the last phase, we replace the server with a new one (to make
 sure clients re-send their messages properly). Unfortunately, the polling
 function closed over the variable holding the original server, and didn't see
 the replacement. It kept polling the old server, and failed to notice the
 outstanding messages for the new server. The last phase of the test (check3)
 was started too early, which failed (since some messages had not yet been
 delivered), and then exploded in a flurry of dirty-reactor errors (because
 some messages were delivered after test shutdown).
 
 This replaces the closed-over-variable with a "self.the_introducer", which
 seems to fix the race.
 
 One additional place to look at in the future: the client
 announcement-receive path (remote_announce) uses an eventually(). If the
 message has been received and the eventual-send posted (but not yet executed)
 when the poller sees it, the poller might erroneously conclude that the
 client is idle and cause the same problem as above. To fix this, the poller
 (probably all pollers) could be enhanced to do a flushEventualQueue before
 querying the are-we-done-yet predicate function.
] 
[Cosmetic formatting in docs.
david-sarah@jacaranda.org**20120322220534
 Ignore-this: 2e3ddb170f45035c4655ce25aaa09977
] 
[Put SFTP before FTP in various docs. fixes #1692
david-sarah@jacaranda.org**20120322220453
 Ignore-this: 6759fbe5d58a965120b55cf3c1578970
] 
[Correct a link to frontends/drop-upload.rst. fixes #1690
david-sarah@jacaranda.org**20120322220118
 Ignore-this: dafc6205151545e8095f908dd57c213
] 
[Fix mutable status (mapupdate/retrieve/publish) to use serverids, not tubids
Brian Warner <warner@lothar.com>**20120318000135
 Ignore-this: 79354457b77fe2d8534fc0b792b6eb0c
 
 This still leaves immutable-publish results incorrectly using tubids instead
 of serverids. That will need some more work, since it might change the Helper
 interface.
] 
[IServer.get_name(): remove v0- prefix from displayed server names
Brian Warner <warner@lothar.com>**20120318000135
 Ignore-this: f3dc25be3ecca5935a4320ca53b70cad
 
 Don't remove the prefix if it isn't there: that avoids the need to fix tests
 which use a bogus key (usually all-zeros).
] 
[Fix a missing comma in the last patch. refs #1295
david-sarah@jacaranda.org**20120314235040
 Ignore-this: 34327ffeabed65759ad511760f925e47
] 
[Temporarily suppress the DeprecationWarning about IFinishableConsumer; it's irritating, but not in a way that is likely to make me fix the underlying issue (#1525) any sooner :-). refs #1295
david-sarah@jacaranda.org**20120314234729
 Ignore-this: 2ab43c7893ed305a9d40023ec176d179
] 
[minor: hush pyflakes, move pycryptopp dep to unconditional section
Brian Warner <warner@lothar.com>**20120314062035
 Ignore-this: 786fae44ad106c7924f8c9644ee0e48d
 
 Also change Makefile's "pyflakes" rule to emit less output, so buildbot will
 count errors properly.
] 
[Update find_links URLs in setup.cfg to https://tahoe-lafs.org. This is not just a doc change; look out for compatibility problems.
david-sarah@jacaranda.org**20120313203041
 Ignore-this: fd18113695c2a524972c389e8b52e2e8
] 
[Minor updates to URLs.
david-sarah@jacaranda.org**20120313202853
 Ignore-this: 2e5719e8cf19d7be73fbcba98dc1e5dd
] 
[Update more links from http: to https: in documentation and comments.
david-sarah@jacaranda.org**20120313202654
 Ignore-this: 2c11cef35639b101412c024896256529
] 
[new introducer: signed extensible dictionary-based messages! refs #466
Brian Warner <warner@lothar.com>**20120314012432
 Ignore-this: e87de488a26c11711cf6978c9fb1175c
 
 This introduces new client and server halves to the Introducer (renaming the
 old one with a _V1 suffix). Both have fallbacks to accomodate talking to a
 different version: the publishing client switches on whether the server's
 .get_version() advertises V2 support, the server switches on which
 subscription method was invoked by the subscribing client.
 
 The V2 protocol sends a three-tuple of (serialized announcement dictionary,
 signature, pubkey) for each announcement. The V2 server dispatches messages
 to subscribers according to the service-name, and throws errors for invalid
 signatures, but does not otherwise examine the messages. The V2 receiver's
 subscription callback will receive a (serverid, ann_dict) pair. The
 'serverid' will be equal to the pubkey if all of the following are true:
 
   the originating client is V2, and was told a privkey to use
   the announcement went through a V2 server
   the signature is valid
 
 If not, 'serverid' will be equal to the tubid portion of the announced FURL,
 as was the case for V1 receivers.
 
 Servers will create a keypair if one does not exist yet, stored in
 private/server.privkey .
 
 The signed announcement dictionary puts the server FURL in a key named
 "anonymous-storage-FURL", which anticipates upcoming Accounting-related
 changes in the server advertisements. It also provides a key named
 "permutation-seed-base32" to tell clients what permutation seed to use. This
 is computed at startup, using tubid if there are existing shares, otherwise
 the pubkey, to retain share-order compatibility for existing servers.
] 
['tahoe admin generate-keypair/derive-pubkey': add Ed25519 keypair commands
Brian Warner <warner@lothar.com>**20120314012432
 Ignore-this: 6dff9c61d97f746de338027b72cf1912
 
 Also add parse_privkey/parse_pubkey tools to util.keyutil
] 
[bump pycryptopp dependency to >=0.6.0, to get ed25519 signatures
Brian Warner <warner@lothar.com>**20120314012432
 Ignore-this: 6c1cf12a30567880ab2cc53c4282be11
 
 This is for the upcoming #466 signed-introducer code.
] 
[Update copyright notices. refs #1686
david-sarah@jacaranda.org**20120313205057
 Ignore-this: a6a4904001412248c4164f002b52f79a
] 
[Make the link on the Welcome page to 'https://tahoe-lafs.org/', not 'http:'. Includes a test. fixes #1682
david-sarah@jacaranda.org**20120308231758
 Ignore-this: b639c3da453b95ee7edca8090ea1b9aa
] 
[Update various references to allmydata.org or http://tahoe-lafs.org in comments, to https://tahoe-lafs.org. refs #1682
david-sarah@jacaranda.org**20120308231719
 Ignore-this: a71d00ea46af0a44e5c957df56d02adf
] 
[Suppress a warning from win32eventreactor on Windows (patch v2). fixes #1681
david-sarah@jacaranda.org**20120227190317
 Ignore-this: c7efe1065d45a00caf182a1de812f4bb
] 
[Add nickname/nodeid to storage-status web page. Closes #1204.
Brian Warner <warner@lothar.com>**20120313025736
 Ignore-this: 78e533e06c390221edd66c45ec96e34a
 
 Also add tahoe.css to the page, to make it look slightly prettier.
] 
[add some quick tests of the introducer/web improvements
Brian Warner <warner@lothar.com>**20120312193536
 Ignore-this: 9e31f368b1dfa586ab6e3f17707d9ec
] 
[introducer web page: add CSS styling, roughly match client Welcome page
Brian Warner <warner@lothar.com>**20120307022505
 Ignore-this: bfc450f394578a3463f31acc1019862
 
 Also add /static and the top-level /tahoe.css -type stuff to the introducer's
 web server.
] 
[tahoe.css: fix #section typo, update welcome.xhtml to match
Brian Warner <warner@lothar.com>**20120307022241
 Ignore-this: 4e8a8382234aad017b093f8896b329d6
 
 The "#section" declaration (which matches id="section") should have been
 ".section" (which matches class="section").
 
 The welcome page has a feature that I actually liked: the little "This
 Client" sidebar sits just to the right of the start of the Controls block.
 Fixing .section broke that (the clear:both introduces a gap, forcing the
 Controls block to start strictly below the bottom of the This Client block).
 So I also removed class="section" from the Controls block to allow them to
 share the horizontal space again.
] 
[make provisioning/reliability work in the new location, fix tests
Brian Warner <warner@lothar.com>**20120216222905
 Ignore-this: 8a2923a54ca224fe69fe404e819aaaac
] 
[remove 'provisioning'/'reliability' from WUI, add to misc/operations_helpers
Brian Warner <warner@lothar.com>**20120216222905
 Ignore-this: 4090c8ac99f139393d9573b65cbbfe0c
 
 Also remove docs related to reliability/provisioning pages
] 
[provisioning.py: update disk sizes and usage numbers
Brian Warner <warner@lothar.com>**20120213155708
 Ignore-this: e47ee282bfba4beb2598b227add5250a
] 
[configuration.rst: another attempt to fix formatting of sample tahoe.cfg.
david-sarah@jacaranda.org**20120131000949
 Ignore-this: bb67b6c9bb191a1335eaadfe9594fa4f
] 
[configuration.rst: remove the obsolete sizelimit option from the sample tahoe.cfg. Also fix the RST formatting of blank lines in the file.
david-sarah@jacaranda.org**20120131000643
 Ignore-this: 9c5327edf031d8578c19383d950b17b9
] 
[Add a Python 3 blocker to setup.py, to display a better error message when it is run under Python 3.
david-sarah@jacaranda.org**20120127015525
 Ignore-this: 5f032794ecc8cd6c512a7ab9efffed2
] 
[Ensure that verification proceeds and stops when appropriate.
Brian Warner <warner@lothar.com>**20120124205209
 Ignore-this: 88278bbd6a3b33cf3b286feaa162ad02
 
 The removed assertions are appropriate for a download that seeks to
 return plaintext to a caller; if we don't have at least k active remote
 shares, then we can't hope to do that. They're not appropriate for a
 verification operation; a user can try to verify a file that has fewer
 than k shares available, so that shouldn't be treated as an error.
 Instead, we proceed with fewer than k shares, and ensure that we
 terminate the download if we have no shares at all and we're verifying.
] 
[Add test_verify_mdmf_all_bad_sharedata
Brian Warner <warner@lothar.com>**20120124205209
 Ignore-this: 52acb4f0256af764acb038f7c8344367
 
 test_verify_mdmf_all_bad_sharedata tests for the regression described
 in ticket 1648. In particular, it will trigger the misplaced assertion
 in the share activation code. It also tests to make sure that
 verification continues with fewer than k shares.
] 
[Added clarification on how interface= works
Brian Warner <warner@lothar.com>**20120124203821
 Ignore-this: 57f86d178c8e4f3c62d15bf99dec7d0d
] 
[FTP-and-SFTP.rst: minor edits
Brian Warner <warner@lothar.com>**20120124203654
 Ignore-this: ec21fadb85cf7b3192d32b02c03c3656
] 
[Updated accounts.url directive per warner's suggestions
Brian Warner <warner@lothar.com>**20120124203126
 Ignore-this: 9297ec6406e11d4e1fe24ba3a06725e3
] 
[Added information on accounts.url directive
Brian Warner <warner@lothar.com>**20120124203126
 Ignore-this: 6d6142418eabdad789a2fc68f26b3ba1
] 
[docs: an extra newline to separate utf-8 BOF from comment for the sake of trac's rst renderer
zooko@zooko.com**20120122212002
 Ignore-this: 5c6d0dbfa1430681fa00494937537956
] 
[docs: a newline between the utf-8 BOF and the comment in order to prevent trac from misrendering the comment
zooko@zooko.com**20120122211856
 Ignore-this: 5e92cb88ba46b82227338522b834b90d
 sheesh
] 
[docs: a comment to inform the (human) reader about encoding and to prevent someone from moving the title up to where it will interact with the utf-8 BOM and cause trac to mis-render the title
zooko@zooko.com**20120122211731
 Ignore-this: f7912a13ffba60408ec901a9586ce8a4
] 
[docs: insert another newline between utf-8 BOF and title
zooko@zooko.com**20120122211427
 Ignore-this: 1b3861ef7d4531acfa61fac31e14fe98
] 
[docs: insert newline after utf-8 BOF and before restructuredtext title
zooko@zooko.com**20120122182127
 Ignore-this: f947afe5bdfc9f44ba9bf7f0e585da7c
] 
[docs: remove utf-8 "BOM" which confuses trac's rst renderer
zooko@zooko.com**20120122140052
 Ignore-this: ba58c59a314f23c65de5443bd7b6ffcb
] 
[docs: try again to change RestructuredText titles to a format that trac will render
zooko@zooko.com**20120122135613
 Ignore-this: 588bbb627a95cd8317c809567cfa3e78
] 
[docs: backdoors.rst: fix title formatting
zooko@zooko.com**20120122135125
 Ignore-this: 5bf980c1a8703ee353cd747ae343176a
] 
[docs: backdoors.rst: stop using embedded URIs and tweak title so that trac will render it correctly; reflow to fill-column 77; M-x whitespace-cleanup
zooko@zooko.com**20120122134319
 Ignore-this: e1b5b3d2809040cfd7f13bb88ee8313d
] 
[update release process: git, not darcs, etc
Brian Warner <warner@lothar.com>**20120113071257
 Ignore-this: 2eaa1f0e93dc545989bb1e62b2446e1e
] 
[prepare to Org-ify how_to_make_a_tahoe-lafs_release: rename the file
Brian Warner <warner@lothar.com>**20120113070153
 Ignore-this: d9bb83dfd6c3b4c0ca0efd2adacdf63c
] 
[.gitignore: ignore generated test-coverage files too
Brian Warner <warner@lothar.com>**20120113065629
 Ignore-this: 4411c7d620f5865b8c4dedef7e5a8c33
] 
[merge relnotes, quickstart.rst from 1.9.1 release
Brian Warner <warner@lothar.com>**20120112232420
 Ignore-this: 6b535bb1a3bd5ea87ee12cc6b17eeb5c
] 
[retrieve.py: unconditionally check share-hash-tree. Fixes #1654.
Brian Warner <warner@lothar.com>**20120112213553
 Ignore-this: 7ddc903a382b52bc014262b3b4099165
 
 Add Kevan's unit test, update known_issues.rst
] 
[.gitignore: also ignore tahoe-deps and .tgz, to fix 'make tarballs'
Brian Warner <warner@lothar.com>**20120112210925
 Ignore-this: e8a7d942f123ee6bf4f2966ddc2742a3
 
 Otherwise, the get-version-from-git code thinks the tree is dirty, and
 creates SUMO tarballs with -dirty in the name.
] 
[Makefile: fix 'make-version' to use git-or-darcs, not just darcs
Brian Warner <warner@lothar.com>**20120112210654
 Ignore-this: ae32660458b5ab036ab98f0d1cf4e414
] 
[_auto_deps.py: don't allow pycrypto 2.0.1. fixes #1631
david-sarah@jacaranda.org**20120110195758
 Ignore-this: de409a745c93a78b095dc72edd13a15d
] 
[MANIFEST.in: make git-based 'setup.py sdist' match darcs
Brian Warner <warner@lothar.com>**20120109234637
 Ignore-this: 92bf7d679e9d5696994efe39c40ae216
 
 Previously, tarballs generated from a git tree were lacking a lot of
 important non-code files, like docs/
] 
[restore .gitignore, stop .darcs-boringfile it
warner@lothar.com**20120109025243
 Ignore-this: b37efcdab8662fe85660d68e3662b4b9
] 
[remove setuptools_darcs.egg
warner@lothar.com**20120108225545
 Ignore-this: 39711cf7a9856acd5a136038d58ca5ff
] 
[fix bundled data under git, remove setuptools_darcs
Brian Warner <warner@lothar.com>**20120108221250
 Ignore-this: ebfc0b267961523edd7e26c761b2554f
 
 This uses explicitly enumerated packages= and package_data= arguments to
 setup(), rather than relying upon the convenient (but darcs-specific)
 functions which would determine these values by asking the revision-control
 system.
 
 Note that darcsver is still used, when building from a darcs tree.
] 
[mutable/retrieve.py: clean up control flow to avoid dropping errors
Brian Warner <warner@lothar.com>**20120108221248
 Ignore-this: 4e991bdf6399439d2cee3d743814a327
 
 * replace DeferredList with gatherResults, simplify result handling
 * use BadShareError to signal recoverable problems in either fetch or
   validate, catch after _validate_block
 * _validate_block is thus not responsible for noticing fetch problems
 * rename _validation_or_decoding_failed() to _handle_bad_share()
 * _get_needed_hashes() returns two Deferreds, instead of a hard-to-unpack
   DeferredList
] 
[mutable/layout.py: raise BadShareError instead of assert()
Brian Warner <warner@lothar.com>**20120108221247
 Ignore-this: 129891a807315f657b80576025135df8
] 
[mutable: don't tell server about corruption unless it's really CorruptShareError
Brian Warner <warner@lothar.com>**20120108221245
 Ignore-this: 90da01af1008477c45d333a0f74f1c5b
] 
[mutable: simplify Retrieve._process_segment() to use a gatherDeferred
Brian Warner <warner@lothar.com>**20120108221244
 Ignore-this: cfc7a56414889d02bffd747f1abad8ef
] 
[Retrieve.decode(): simplify setup of DeferredList-like argument
Brian Warner <warner@lothar.com>**20120108221240
 Ignore-this: c92d377bf4d65251240e59c8db5452af
 
 make it more obviously match the expectations of _decode_blocks() and
 _maybe_decode_and_decrypt_segment()
] 
[mutable: add comments about the tricky DeferredList structures in retrieve
Brian Warner <warner@lothar.com>**20120108221238
 Ignore-this: da47db692fbdf11a3ce01a952a60d1a0
] 
[add test-git-ignore.py, to port the 'clean' buildbot test to git
Brian Warner <warner@lothar.com>**20120108221232
 Ignore-this: 442efa1eacc27b7ae2690645ed997894
 
 add .gitignore to match .darcs-boringfile, mostly
] 
[Use a private/drop_upload_dircap file instead of the [drop_upload]upload.dircap option in tahoe.cfg. Fail if the upload.dircap option is used, or options are missing. Also updates tests and docs. fixes #1593
david-sarah@jacaranda.org**20111120232426
 Ignore-this: d4ea9154e98902c5de055b6de23c48f9
] 
[test_mutable: don't use 75 shares (slow), now that the bug is fixed
Brian Warner <warner@lothar.com>**20111228223819
 Ignore-this: 930f1a24ebe9ed2ab25e4b2a16e36352
 
 I missed this part of Kevan's fix-1628.darcs.2.patch .
] 
[mutable publish: fix not-enough-shares detection. Refs #1628.
Brian Warner <warner@lothar.com>**20111228055018
 Ignore-this: 23db08d8d630268e208e1755509adf92
 
 This should match the "fix-1628.darcs.2.patch" attachment on that ticket.
] 
[mutable publish: track multiple servers-per-share. Fixes some of #1628.
Brian Warner <warner@lothar.com>**20111228053358
 Ignore-this: 6e8cb92e70273b81098f73ebf23164bd
 
 The remaining work is to write additional tests.
 
 src/allmydata/test/no_network.py:
 
  This supports tests in which servers leave the grid only to return with
  their shares intact at a later time.
 
 src/allmydata/test/test_mutable.py:
 
  The UCWEs in the incident reports associated with #1628 all seem to be
  associated with shares that the servermap knows about, but which aren't
  accounted for during the publish process for whatever reason. Specifically,
  it looks like the publisher is only capable of keeping track of a single
  storage server for a given share. This makes the repair process worse than
  it was pre-MDMF at updating all of the shares of a particular file to the
  newest version, and can also cause spurious UCWEs. This test simulates such
  a layout and fails if an UCWE is thrown. We need to write another test to
  ensure that all copies of a share are updated to the latest version (or
  alter this test to do that), so that the test suite doesn't pass unless both
  regressions are fixed.
 
  We want the publisher to follow the existing share placement when uploading
  a new version of a mutable file, and we don't want this test to pass unless
  it does.
 
 src/allmydata/mutable/publish.py:
 
  Before this commit, the publisher only kept track of a single writer for
  each share. This is insufficient to handle updates in which a single share
  may live on multiple servers. In the best case, an update will only update
  one of the existing shares instead of all of them. In some cases, the update
  will encounter the existing shares when publishing some other share,
  interpret it as a sign of an uncoordinated update, and fail. Keeping track
  of all of the writers helps ensure that all existing shares are updated, and
  helps avoid spurious uncoordinated write errors.
] 
[docs: how_to_make_a_tahoe-lafs_release.rst add Google+ page to publicity list, change to cute unicode checkboxes
zooko@zooko.com**20111226151905
 Ignore-this: c7c1e67761df48fa11c0dad1847c2d8
] 
[doc: about.rst: use unicode emdash, use non-embedded URIs, add clarificaiton of when a file gets its mutable-or-immutable nature
zooko@zooko.com**20111206171908
 Ignore-this: 61bc3f1582c68dcc9867da964fc9bb3a
 embedded URIs, although documented here:
 http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#embedded-uris
 generate messages like this from rst2html --verbose:
 
 quickstart.rst:3: (INFO/1) Duplicate explicit target name: "the tahoe-dev mailing list".
 
 Also this patch prepends a "utf-8 BOM" to the beginning of the file.
] 
[minor cleanup: remove trailing spaces in misc/
Brian Warner <warner@lothar.com>**20111218201841
 Ignore-this: 69a8904c17d8fd930442d00e24b7b188
] 
[Tests for ref #1592.
david-sarah@jacaranda.org**20111217043130
 Ignore-this: a6713500ebe2d686581c6743b8a88f60
] 
[test_web.py cleanup: use failUnlessIn/failIfIn in preference to 'in' operator.
david-sarah@jacaranda.org**20111217042710
 Ignore-this: c351f4b1d162eca545ba657dc3c70c19
] 
[Marcus Wanner's favicon patch. fixes #1592
david-sarah@jacaranda.org**20111217033201
 Ignore-this: 3528c920379fe0d157441dafe9a7c5a8
] 
[setup.py: stop putting pyutil.version_class/etc in _version.py
Brian Warner <warner@lothar.com>**20111205055049
 Ignore-this: 926fa9a8a34a04f24ee6e006423e9c1
 
 allmydata.__version__ can just be a string, it doesn't need to be an instance
 of some fancy NormalizedVersion class. Everything inside Tahoe uses
 str(__version__) anyways.
 
 Also add .dev0 when a git tree is dirty.
 
 Closes #1466
] 
[setup.py: get version from git or darcs
Brian Warner <warner@lothar.com>**20111205044001
 Ignore-this: 5a406b33000446d85edc722298391220
 
 This replaces the setup.cfg aliases that run "darcsver" before each major
 command with the new "update_version". update_version is defined in setup.py,
 and tries to get a version string from either darcs or git (or leaves the
 existing _version.py alone if neither VC metadata is available).
 
 Also clean up a tiny typo in verlib.py that messed up syntax hilighting.
] 
[docs/known_issues.rst: describe when the unauthorized access attack is known to be possible, and fix a link.
david-sarah@jacaranda.org**20111118002013
 Ignore-this: d89b1f1040a0a7ee0bde893d23612049
] 
[more tiny buildbot-testing whitespace changes
warner@lothar.com**20111118002041
 Ignore-this: e816e2a5ab939e2f7a89ef12b8a157d8
] 
[more tiny buildbot-testing whitespace changes
warner@lothar.com**20111118001828
 Ignore-this: 57bb52cba83ea9a19728ba0a8ffadb69
] 
[tiny change to exercise the buildbot hook
warner@lothar.com**20111118001511
 Ignore-this: 7220b7790b39f19f9721d9e93b755030
] 
[Strengthen description of unauthorized access attack in known_issues.rst.
david-sarah@jacaranda.org**20111118000030
 Ignore-this: e2f68f621fe666b6201542623aa4d182
] 
[remove remaining uses of nevow's "formless" module
Brian Warner <warner@lothar.com>**20111117225423
 Ignore-this: a128dea91a1c63b3bbefa34729344d69
 
 We're slowly moving away from Nevow, and marcusw's previous patch removed
 uses of the formless CSS file, so now we can stop testing that nevow can find
 that file, and remove the lingering unused "import formless" call.
] 
[1585-webui.darcs.patch
Marcus Wanner <marcus@wanners.net>**20111117214923
 Ignore-this: 23cf2a06c545be5f821c071d652178ee
] 
[Remove duplicate tahoe_css links from manifest.xhtml and rename-form.xhtml
Brian Warner <warner@lothar.com>**20111116224225
 Ignore-this: 12024fff17964607799928928b9aadf3
 
 They were probably meant to be links to webform_css, but we aren't really
 using Nevow's form-generation code anyways, so they can just be removed.
 Thanks to 'marcusw' for the catch.
] 
[iputil: handle openbsd5 (just like openbsd4)
Brian Warner <warner@lothar.com>**20111115220423
 Ignore-this: 64b28bd2fd06eb5230ea41d91540dd05
 
 Patch by 'sickness'. Closes #1584
] 
[Makefile count-lines: let it work on OS-X (-l not --lines), add XXX
Brian Warner <warner@lothar.com>**20111109184227
 Ignore-this: 204ace1dadc9ed27543c62965b4e6757
 
 OS-X's simple-minded /usr/bin/wc doesn't understand --lines, but everyone
 understands -l .
] 
[setup.py: umask=022 for 'sdist', to avoid depending on environment
Brian Warner <warner@lothar.com>**20111109183632
 Ignore-this: acd5db88ba8f1972d618b14f9e5b803c
 
 The new tarball-building buildslave had a bogus umask set, causing the 1.9.0
 tarballs to be non-other-user-readable (go-rwx), which is a hassle for
 packaging. (The umask was correct on the old buildslave, but it was moved to
 a new host shortly before the release). This should make sure tarballs are
 correct despite the host's setting.
 
 Note to others: processes run under twistd get umask=077 unless you arrange
 otherwise.
] 
[_auto_deps.py: blacklist PyCrypto 2.4.
david-sarah@jacaranda.org**20111105022457
 Ignore-this: 876cb24bc71589e735f48bf449cad81e
] 
[check-miscaptures.py: report the number of files that were not analysed due to syntax errors (and don't count them in the number of suspicious captures). refs #1555
david-sarah@jacaranda.org**20111009050301
 Ignore-this: 62ee03f4b8a96c292e75c097ad87d52e
] 
[check-miscaptures.py: handle corner cases around default arguments correctly. Also make a minor optimization when there are no assigned variables to consider. refs #1555
david-sarah@jacaranda.org**20111009045023
 Ignore-this: f49ece515620081da1d745ae6da19d21
] 
[check-miscaptures.py: Python doesn't really have declarations; report the topmost assignment. refs #1555
david-sarah@jacaranda.org**20111009044800
 Ignore-this: 4905c9dfe7726f433333e216a6760a4b
] 
[check-miscaptures.py: handle destructuring function arguments correctly. refs #1555
david-sarah@jacaranda.org**20111009044710
 Ignore-this: f9de7d95e94446507a206c88d3f98a23
] 
[check-miscaptures.py: check while loops and list comprehensions as well as for loops. Also fix a pyflakes warning. refs #1555
david-sarah@jacaranda.org**20111009044022
 Ignore-this: 6526e4e315ca6461b1fbc2da5568e444
] 
[Add misc/coding_tools/check-miscaptures.py to detect incorrect captures of variables declared in a for loop, and a 'make check-miscaptures' Makefile target to run it. (It is also run by 'make code-checks'.) This is a rewritten version that reports much fewer false positives, by determining captured variables more accurately. fixes #1555
david-sarah@jacaranda.org**20111007074121
 Ignore-this: 51318e9678d132c374ea557ab955e79e
] 
[Fix pyflakes warnings in misc/ directories other than misc/build_helpers. refs #1557
david-sarah@jacaranda.org**20111007033031
 Ignore-this: 7daf5862469732d8cabc355266622b74
] 
[Makefile: include misc/ directories other than misc/build_helpers in SOURCES. refs #1557
david-sarah@jacaranda.org**20111007032958
 Ignore-this: 31376ec01401df7972e83341dc65aa05
] 
[show-tool-versions: tolerate missing setuptools
Brian Warner <warner@lothar.com>**20111101080010
 Ignore-this: 72d4e440565273992beb4f010cbca699
] 
[show-tool-versions.py: condense output, hide file-not-found exceptions
Brian Warner <warner@lothar.com>**20111101074532
 Ignore-this: a15381a76077ef46a74a4ac40c9ae956
] 
[relnotes.txt: fix footnotes
Brian Warner <warner@lothar.com>**20111101071935
 Ignore-this: 668c1bd8618e21beed9bc6b23f048189
] 
[Rewrite download-status-timeline visualizer ('viz') with d3.js
Brian Warner <warner@lothar.com>**20111101061821
 Ignore-this: 6149b027bbae52c559ef5a8167240cab
 
 * use d3.js v2.4.6
 * add a "toggle misc events" button, to get hash/bitmap-checking details
 * only draw data that's on screen, for speed
 * add fragment-arg to fetch timeline data.json from somewhere else
] 
[IServer refactoring: pass IServer instances around, instead of peerids
Brian Warner <warner@lothar.com>**20111101040319
 Ignore-this: 35e4698a0273a0311fe0ccedcc7881b5
 
 refs #1363
 
 This collapses 88 small incremental changes (each of which passes all tests)
 into one big patch. The development process for the long path started with
 adding some temporary scaffolding, changing one method at a time, then
 removing the scaffolding. The individual pieces are as follows, in reverse
 chronological order (the first patch is at the end of this comment):
 
  commit 9bbe4174fd0d98a6cf47a8ef96e85d9ef34b2f9a
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 16:05:00 2011 -0400
 
      immutable/downloader/status.py: correct comment
 
   src/allmydata/immutable/downloader/status.py |    2 +-
   1 files changed, 1 insertions(+), 1 deletions(-)
 
  commit 72146a7c7c91eac2f7c3ceb801eb7a1721376889
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 15:46:20 2011 -0400
 
      remove temporary ServerMap._storage_broker
 
   src/allmydata/mutable/checker.py   |    2 +-
   src/allmydata/mutable/filenode.py  |    2 +-
   src/allmydata/mutable/publish.py   |    2 +-
   src/allmydata/mutable/servermap.py |    5 ++---
   src/allmydata/test/test_mutable.py |    8 ++++----
   5 files changed, 9 insertions(+), 10 deletions(-)
 
  commit d703096b41632c47d76414b12672e076a422ff5c
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 15:37:05 2011 -0400
 
      remove temporary storage_broker.get_server_for_id()
 
   src/allmydata/storage_client.py  |    3 ---
   src/allmydata/test/no_network.py |   13 -------------
   2 files changed, 0 insertions(+), 16 deletions(-)
 
  commit 620cc5d80882ef6f7decfd26af8a6c7c1ddf80d1
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:50:06 2011 -0400
 
      API of Retrieve._try_to_validate_privkey(), trying to remove reader.server
 
   src/allmydata/mutable/retrieve.py |   10 +++++-----
   1 files changed, 5 insertions(+), 5 deletions(-)
 
  commit 92f43f856f4a8b36c207d1b190ed8699b5a4ecb4
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:48:08 2011 -0400
 
      API of Retrieve._validate_block(), trying to remove reader.server
 
   src/allmydata/mutable/retrieve.py |   14 +++++++-------
   1 files changed, 7 insertions(+), 7 deletions(-)
 
  commit 572d5070761861a2190349d1ed8d85dbc25698a5
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:36:58 2011 -0400
 
      API of Retrieve._mark_bad_share(), trying to remove reader.server
 
   src/allmydata/mutable/retrieve.py |   21 +++++++++------------
   1 files changed, 9 insertions(+), 12 deletions(-)
 
  commit a793ff00c0de1e2eec7b46288fdf388c7a2bec89
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:06:13 2011 -0400
 
      remove now-unused get_rref_for_serverid()
 
   src/allmydata/mutable/servermap.py |    3 ---
   1 files changed, 0 insertions(+), 3 deletions(-)
 
  commit 1b9827cc9366bf90b93297fdd6832f2ad0480ce7
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:03:09 2011 -0400
 
      Retrieve: stop adding .serverid attributes to readers
 
   src/allmydata/mutable/retrieve.py |    1 -
   1 files changed, 0 insertions(+), 1 deletions(-)
 
  commit 5d4e9d491b19e49d2e443a1dfff2c672842c36ef
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:03:34 2011 -0400
 
      return value of Retrieve(verify=True)
 
   src/allmydata/mutable/checker.py  |   11 ++++++-----
   src/allmydata/mutable/retrieve.py |    3 +--
   2 files changed, 7 insertions(+), 7 deletions(-)
 
  commit e9ab7978c384e1f677cb7779dc449b1044face82
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:54:23 2011 -0400
 
      Retrieve._bad_shares (but not return value, used by Verifier)
 
   src/allmydata/mutable/retrieve.py |    7 ++++---
   1 files changed, 4 insertions(+), 3 deletions(-)
 
  commit 2d91926de233ec5c881f30e36b4a30ad92ab42a9
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:51:23 2011 -0400
 
      Publish: stop adding .serverid attributes to writers
 
   src/allmydata/mutable/publish.py |    9 ++-------
   1 files changed, 2 insertions(+), 7 deletions(-)
 
  commit 47c7a0105dec7cbf4f7e0a3ce800bbb85b15df4a
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:56:33 2011 -0400
 
      API of get_write_enabler()
 
   src/allmydata/mutable/filenode.py |    7 ++++---
   src/allmydata/mutable/publish.py  |    4 ++--
   src/allmydata/test/no_network.py  |    3 +++
   3 files changed, 9 insertions(+), 5 deletions(-)
 
  commit 9196a5c6590fdbfd660325ea8358b345887d3db0
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:46:24 2011 -0400
 
      API of get_(renewal|cancel)_secret()
 
   src/allmydata/mutable/filenode.py  |   14 ++++++++------
   src/allmydata/mutable/publish.py   |    8 ++++----
   src/allmydata/mutable/servermap.py |    5 ++---
   3 files changed, 14 insertions(+), 13 deletions(-)
 
  commit de7c1552f8c163eff5b6d820b5fb3b21c1b47cb5
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:41:52 2011 -0400
 
      API of CorruptShareError. Also comment out some related+unused test_web.py code
 
   src/allmydata/mutable/common.py    |   13 +++++--------
   src/allmydata/mutable/retrieve.py  |   10 +++++-----
   src/allmydata/mutable/servermap.py |    8 +++-----
   src/allmydata/test/common.py       |   13 ++++++++-----
   4 files changed, 21 insertions(+), 23 deletions(-)
 
  commit 2c1c314046b620c16f1e66d030c150d768b7d01e
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:01:46 2011 -0400
 
      API of ServerMap.mark_bad_share()
 
   src/allmydata/mutable/publish.py   |    2 +-
   src/allmydata/mutable/retrieve.py  |    6 +++---
   src/allmydata/mutable/servermap.py |    6 ++----
   src/allmydata/test/test_mutable.py |    3 +--
   4 files changed, 7 insertions(+), 10 deletions(-)
 
  commit 1bed349030779fd0c378ae4e821384f953c6f6ff
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:11:17 2011 -0400
 
      API+name of ServerMap.shares_on_server() : only for tests, so debug_ prefix
 
   src/allmydata/mutable/servermap.py |    7 ++-----
   src/allmydata/test/test_mutable.py |    6 +++---
   2 files changed, 5 insertions(+), 8 deletions(-)
 
  commit 2d32e448677d6b818692e801045d4115b29abf21
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:07:10 2011 -0400
 
      API of ServerMap.all_servers_for_version()
 
   src/allmydata/mutable/servermap.py |    4 ++--
   1 files changed, 2 insertions(+), 2 deletions(-)
 
  commit 48f3204d1889c3e7179578125c4bdef515af3d6a
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:04:50 2011 -0400
 
      internals of ServerMap methods that use make_versionmap(), remove temp copy
 
   src/allmydata/mutable/servermap.py |   28 +++++++++----------------
   1 files changed, 10 insertions(+), 18 deletions(-)
 
  commit 5c3da77b6c777a145bd5ddfaa4db849dc9495548
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:01:28 2011 -0400
 
      API of ServerMap.make_versionmap()
 
   src/allmydata/mutable/checker.py   |    4 ++--
   src/allmydata/mutable/retrieve.py  |    5 ++---
   src/allmydata/mutable/servermap.py |    4 ++--
   src/allmydata/test/test_mutable.py |    7 ++++---
   4 files changed, 10 insertions(+), 10 deletions(-)
 
  commit b6882ece49afb4c507d118af2db346fa329209dc
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 10:53:38 2011 -0400
 
      make a copy of ServerMap.make_versionmap() (_make_versionmap2) for internal use
 
   src/allmydata/mutable/servermap.py |   18 +++++++++++++-----
   1 files changed, 13 insertions(+), 5 deletions(-)
 
  commit 963f8e63faf32b950eb1b8103cd2ff16fe8f0151
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:45:58 2011 -0400
 
      API of RetrieveStatus.add_problem()
 
   src/allmydata/mutable/retrieve.py |    5 +++--
   1 files changed, 3 insertions(+), 2 deletions(-)
 
  commit 4976d29ffae565a048851601c29013bbae2976d8
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:45:05 2011 -0400
 
      API of RetrieveStatus.add_fetch_timing()
 
   src/allmydata/mutable/retrieve.py |    5 +++--
   1 files changed, 3 insertions(+), 2 deletions(-)
 
  commit d057d3bbba72663ee148a8b916bc2d52be2e3982
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:44:04 2011 -0400
 
      API of Retrieve.notify_server_corruption()
 
   src/allmydata/mutable/retrieve.py |    6 +++---
   1 files changed, 3 insertions(+), 3 deletions(-)
 
  commit 8a2a81e46671c860610e0e96d6add1a57551f22d
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:42:32 2011 -0400
 
      remove unused _outstanding_queries
 
   src/allmydata/mutable/retrieve.py |    1 -
   1 files changed, 0 insertions(+), 1 deletions(-)
 
  commit 56d12cc9968d03ccd53764455c671122c4f391d1
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:40:57 2011 -0400
 
      change Retrieve.remaining_sharemap
 
   src/allmydata/mutable/retrieve.py |    4 ++--
   1 files changed, 2 insertions(+), 2 deletions(-)
 
  commit 4f0b7af4821f43290bfc70f2b1fc30149ad81281
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 10:40:18 2011 -0400
 
      accessor for PublishStatus._problems
 
   src/allmydata/mutable/publish.py |    4 +++-
   src/allmydata/web/status.py      |    2 +-
   2 files changed, 4 insertions(+), 2 deletions(-)
 
  commit 627087cf66d0b8cc519f4d551a967a7bd9b6a741
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 10:36:39 2011 -0400
 
      accessor for RetrieveStatus._problems
 
   src/allmydata/mutable/retrieve.py |    8 ++++++--
   src/allmydata/web/status.py       |    2 +-
   2 files changed, 7 insertions(+), 3 deletions(-)
 
  commit ca7dea81f03801b1c7353fc00ecba689268109cf
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:35:32 2011 -0400
 
      add .server to "reader", so we can get at it later
 
   src/allmydata/mutable/retrieve.py |    5 +++--
   1 files changed, 3 insertions(+), 2 deletions(-)
 
  commit 6ef516e24908ec195af084a7550d1921a5e983b0
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:32:32 2011 -0400
 
      temporarily give Retrieve a _storage_broker, so it can map serverids to servers
 
   src/allmydata/mutable/checker.py   |    3 ++-
   src/allmydata/mutable/filenode.py  |    6 ++++--
   src/allmydata/mutable/retrieve.py  |    5 +++--
   src/allmydata/test/test_mutable.py |    4 ++--
   4 files changed, 11 insertions(+), 7 deletions(-)
 
  commit afe08e4dd3f4ff9ff7e8a2a8d28b181e3625bcc9
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:21:51 2011 -0400
 
      mutable/retrieve.py: s/peer/server/
 
   src/allmydata/mutable/retrieve.py  |   82 +++++++++++++-------------
   src/allmydata/test/test_mutable.py |    6 +-
   2 files changed, 44 insertions(+), 44 deletions(-)
 
  commit 910afcb5d7f274880f68dd6cdb5b05f2bbc29adc
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:16:01 2011 -0400
 
      web.status.PublishStatusPage: add comment, I think .problems isn't exercised
 
   src/allmydata/web/status.py |    2 ++
   1 files changed, 2 insertions(+), 0 deletions(-)
 
  commit 311466dd8c931bbba40d590ade867704282e7f1a
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:48:16 2011 -0400
 
      API of PublishStatus.add_per_server_time()
 
   src/allmydata/mutable/publish.py |    5 +++--
   1 files changed, 3 insertions(+), 2 deletions(-)
 
  commit 2df5faa1b6cbfbaded520d2320305a62fe961118
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:46:37 2011 -0400
 
      more simplifications
 
   src/allmydata/mutable/publish.py |    4 +---
   1 files changed, 1 insertions(+), 3 deletions(-)
 
  commit 6ac4544a3da385f2aad9392f906b90192f4f919a
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:44:08 2011 -0400
 
      API of ServerMap.version_on_server()
 
   src/allmydata/mutable/publish.py   |    2 +-
   src/allmydata/mutable/servermap.py |    4 ++--
   src/allmydata/test/test_mutable.py |    5 ++---
   3 files changed, 5 insertions(+), 6 deletions(-)
 
  commit 3e187e322511072e4683329df6b2c6c733a66dba
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:16:32 2011 -0400
 
      API of ServerMap.make_sharemap()
 
   src/allmydata/mutable/servermap.py |    4 ++--
   src/allmydata/test/test_mutable.py |    7 ++++---
   src/allmydata/web/status.py        |    4 ++--
   3 files changed, 8 insertions(+), 7 deletions(-)
 
  commit 318feed8437bdd8d4943c6569d38f7b54b6313cc
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:36:19 2011 -0400
 
      small cleanups
 
   src/allmydata/mutable/publish.py |    4 ++--
   1 files changed, 2 insertions(+), 2 deletions(-)
 
  commit bd459ed5714e1db5a7163935c54b7b0b56db8349
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:33:39 2011 -0400
 
      API of ServerMap.add_new_share()
 
   src/allmydata/mutable/publish.py   |    4 ++--
   src/allmydata/mutable/servermap.py |    6 ++----
   2 files changed, 4 insertions(+), 6 deletions(-)
 
  commit f2804fb6ed11d80088e0da8ed48e6c2922f2ffef
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:30:26 2011 -0400
 
      API of ServerMap.get_bad_shares()
 
   src/allmydata/mutable/publish.py   |    3 +--
   src/allmydata/mutable/servermap.py |    9 ++++-----
   2 files changed, 5 insertions(+), 7 deletions(-)
 
  commit 965074a47b3ce1431cb46d9a233840afcf9105f5
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:26:58 2011 -0400
 
      more small cleanups
 
   src/allmydata/mutable/publish.py |    6 +++---
   1 files changed, 3 insertions(+), 3 deletions(-)
 
  commit 38020da34f034f8889947dd3dc05e087ffff7106
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:18:47 2011 -0400
 
      change Publish.bad_share_checkstrings
 
   src/allmydata/mutable/publish.py |    6 +++---
   1 files changed, 3 insertions(+), 3 deletions(-)
 
  commit 5efebcbd2ee0c2f299ea86f7591d856c0f265304
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:16:31 2011 -0400
 
      change internals of Publish.update_goal()
 
   src/allmydata/mutable/publish.py |    8 +++-----
   1 files changed, 3 insertions(+), 5 deletions(-)
 
  commit e91b55ff4c2a69165b71f2c7b217ac319ff4c527
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:11:42 2011 -0400
 
      get rid of Publish.connections
 
   src/allmydata/mutable/publish.py |   27 +++++----------------------
   1 files changed, 5 insertions(+), 22 deletions(-)
 
  commit 64e9a53b3229ebe2f9ebf7ed502d539311d0e037
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:05:32 2011 -0400
 
      change Publish.bad_servers
 
   src/allmydata/mutable/publish.py |   10 +++++-----
   1 files changed, 5 insertions(+), 5 deletions(-)
 
  commit b85a934bef315a06bcfe00c9c12a3627fed2b918
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:03:07 2011 -0400
 
      Publish.bad_servers: fix bug, this should be a set of serverids, not writers
 
   src/allmydata/mutable/publish.py |    2 +-
   1 files changed, 1 insertions(+), 1 deletions(-)
 
  commit 605ea15ec15ed671513819003ccd211cdb9761e0
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:00:21 2011 -0400
 
      change .placed
 
   src/allmydata/mutable/publish.py |    6 +++---
   1 files changed, 3 insertions(+), 3 deletions(-)
 
  commit f7aba37b1b345d5b6d5cb16e3b3f6f3c1afb658e
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 22:59:22 2011 -0400
 
      temporarily stash IServer as .server on the "writer" object
 
   src/allmydata/mutable/publish.py |    2 ++
   1 files changed, 2 insertions(+), 0 deletions(-)
 
  commit f9b551d788e7db1f187fce5ab98ab5d5fe4e1c36
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 22:48:18 2011 -0400
 
      change Publish.goal and API of log_goal() to use IServer, not serverid
 
   src/allmydata/mutable/publish.py |   48 ++++++++++++++--------------
   1 files changed, 24 insertions(+), 24 deletions(-)
 
  commit 75f20616558e4900b8b1f685dd99aa838de6d452
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:27:02 2011 -0400
 
      API of ServerMap.get_known_shares()
 
   src/allmydata/mutable/publish.py   |   16 ++++++++++------
   src/allmydata/mutable/servermap.py |    7 ++-----
   2 files changed, 12 insertions(+), 11 deletions(-)
 
  commit 1c38c9d37bb08221b4418762234b1a62397b3b4b
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:20:29 2011 -0400
 
      Publish.full_serverlist
 
   src/allmydata/mutable/publish.py |   10 +++++-----
   1 files changed, 5 insertions(+), 5 deletions(-)
 
  commit b6cbd215a04b9cde31a7d92a97a7f048622b16f1
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:12:31 2011 -0400
 
      API of ServerMap.all_servers()
 
   src/allmydata/mutable/servermap.py |   19 ++++++-------------
   1 files changed, 6 insertions(+), 13 deletions(-)
 
  commit e63cd0315fae65357b1727ec6d5ff3c6e0d27c98
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:10:18 2011 -0400
 
      remove ServerMap.connections, set_rref_for_serverid()
 
   src/allmydata/mutable/servermap.py |   11 +----------
   1 files changed, 1 insertions(+), 10 deletions(-)
 
  commit 4df52db2f80eb12eefa5d57103c24893cde89553
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:04:06 2011 -0400
 
      API of ServerMap.mark_server_reachable()
 
   src/allmydata/mutable/servermap.py |    7 ++-----
   1 files changed, 2 insertions(+), 5 deletions(-)
 
  commit 69c715bde77944dc25181b3dbbeb042c816f9a1b
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:03:21 2011 -0400
 
      API of ServerMap.mark_server_unreachable()
 
   src/allmydata/mutable/servermap.py |    9 +++------
   1 files changed, 3 insertions(+), 6 deletions(-)
 
  commit 3d784d60eec1c508858e3a617e4411ffbcc3c1fa
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:02:03 2011 -0400
 
      API of status.set_privkey_from()
 
   src/allmydata/mutable/servermap.py |    7 +++----
   1 files changed, 3 insertions(+), 4 deletions(-)
 
  commit 544ed3ea29bed7e66da7fd29ca3f6f076f27a9e6
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:01:15 2011 -0400
 
      API of status.add_per_server_time()
 
   src/allmydata/mutable/servermap.py |    7 ++++---
   1 files changed, 4 insertions(+), 3 deletions(-)
 
  commit fffe5008b6320bd1e04c3c68389a2bf2ee383fa8
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:59:02 2011 -0400
 
      remove unused .versionmap
 
   src/allmydata/mutable/servermap.py |    7 -------
   1 files changed, 0 insertions(+), 7 deletions(-)
 
  commit 2816562e090d2294179db3588dafcca18de1bc2b
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:57:51 2011 -0400
 
      remove serverid from all log messages. Also one unused lambda.
 
   src/allmydata/mutable/servermap.py |   30 +++++++++++++-------------
   1 files changed, 15 insertions(+), 15 deletions(-)
 
  commit 28fa6b1a2738fa98c1f1dbd3d0e01ae98912d11f
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:54:30 2011 -0400
 
      removed unused _readers
 
   src/allmydata/mutable/servermap.py |    3 ---
   1 files changed, 0 insertions(+), 3 deletions(-)
 
  commit a8e4ed3d645ab592d1add6a1e69b6d1ebfb77817
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:54:16 2011 -0400
 
      remove unused _sharemap
 
   src/allmydata/mutable/servermap.py |    1 -
   1 files changed, 0 insertions(+), 1 deletions(-)
 
  commit 3f072e55cf1d0700f9fffe23f8f3a475725df588
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:49:03 2011 -0400
 
      _must_query
 
   src/allmydata/mutable/servermap.py |    8 ++++----
   1 files changed, 4 insertions(+), 4 deletions(-)
 
  commit c599a059b8df3f5785e4bf89fb6ecc6d8dcd708b
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:48:05 2011 -0400
 
      _queries_outstanding
 
   src/allmydata/mutable/servermap.py |   16 +++++++---------
   1 files changed, 7 insertions(+), 9 deletions(-)
 
  commit 7743759f98ac2c07926b2fdbd80bf52dfab33085
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:46:17 2011 -0400
 
      _empty_servers
 
   src/allmydata/mutable/servermap.py |    5 ++---
   1 files changed, 2 insertions(+), 3 deletions(-)
 
  commit 6bb1825916828a713a32cdf7f7411fa3ea2e1e5d
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:45:39 2011 -0400
 
      _good_servers
 
   src/allmydata/mutable/servermap.py |    4 ++--
   1 files changed, 2 insertions(+), 2 deletions(-)
 
  commit 1768fab1b51d8dd93ecabbaaabfadfa20cf6c3d4
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:44:59 2011 -0400
 
      _bad_servers
 
   src/allmydata/mutable/servermap.py |   14 +++++++-------
   1 files changed, 7 insertions(+), 7 deletions(-)
 
  commit dccbaef30f0ba714c746bf6d4a1a803c36e17b65
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:41:54 2011 -0400
 
      API of _try_to_set_pubkey()
 
   src/allmydata/mutable/servermap.py |    7 ++++---
   1 files changed, 4 insertions(+), 3 deletions(-)
 
  commit 0481ea70042ba3575f15eac7fd0780f8ece580cc
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:35:02 2011 -0400
 
      API of notify_server_corruption()
 
   src/allmydata/mutable/servermap.py |    6 +++---
   1 files changed, 3 insertions(+), 3 deletions(-)
 
  commit bea9cba18fb3b9c11bb22f18356a263ecec7351e
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:34:09 2011 -0400
 
      API of _got_signature_one_share()
 
   src/allmydata/mutable/servermap.py |    9 +++++----
   1 files changed, 5 insertions(+), 4 deletions(-)
 
  commit 1520123583cf78650706e114b15bb5b0ac1f4a14
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:32:33 2011 -0400
 
      API of _try_to_validate_privkey()
 
   src/allmydata/mutable/servermap.py |    9 +++++----
   1 files changed, 5 insertions(+), 4 deletions(-)
 
  commit 938852c9c8519c7a078f58a9b1f4dd8ec8b6715e
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:31:48 2011 -0400
 
      API and internals of _add_lease_failed()
 
   src/allmydata/mutable/servermap.py |    8 ++++----
   1 files changed, 4 insertions(+), 4 deletions(-)
 
  commit 3843dba367e3c19e176a622ab853cb51d2472ddf
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:30:37 2011 -0400
 
      API of _privkey_query_failed()
 
   src/allmydata/mutable/servermap.py |    5 +++--
   1 files changed, 3 insertions(+), 2 deletions(-)
 
  commit 2219a710e1633cd57d0ca0786490de87b3e19ba7
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:29:43 2011 -0400
 
      fix bug in call to _privkey_query_failed, unrelated to refactoring
 
   src/allmydata/mutable/servermap.py |    2 +-
   1 files changed, 1 insertions(+), 1 deletions(-)
 
  commit ae615bec7d0d1b269710b6902797b12f9592ad62
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:27:17 2011 -0400
 
      API of _got_corrupt_share()
 
   src/allmydata/mutable/servermap.py |   17 +++++++++--------
   1 files changed, 9 insertions(+), 8 deletions(-)
 
  commit cb51c95a6f4e077278157a77dab060c8c1ad7a81
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:23:16 2011 -0400
 
      API of _got_results()
 
   src/allmydata/mutable/servermap.py |    9 +++++----
   1 files changed, 5 insertions(+), 4 deletions(-)
 
  commit bac9154fe0af18f226999a58ffc2362d8cf4b802
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:19:19 2011 -0400
 
      API of _query_failed()
 
   src/allmydata/mutable/servermap.py |    5 +++--
   1 files changed, 3 insertions(+), 2 deletions(-)
 
  commit fdc29a8ca95d4b5c503e5382b9e5d4d02141ba12
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:17:20 2011 -0400
 
      API of _do_read()
 
   src/allmydata/mutable/servermap.py |    6 ++++--
   1 files changed, 4 insertions(+), 2 deletions(-)
 
  commit e7e9e338f28d004aa4d423d11c65f1e271ac7322
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:20:21 2011 -0400
 
      API of _do_query()
 
   src/allmydata/mutable/servermap.py |   15 +++++++--------
   1 files changed, 7 insertions(+), 8 deletions(-)
 
  commit 330625b9dac4cdbe72a11464a893065b9aeed453
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:43:05 2011 -0400
 
      next step: first batch of updates to ServermapUpdater
 
      updates:
       most method-local variables in update()
       API of _build_initial_querylist()
       API of _send_initial_requests()
       .full_serverlist
       .extra_servers
 
   src/allmydata/mutable/servermap.py |   39 ++++++++++++++------------
   1 files changed, 21 insertions(+), 18 deletions(-)
 
  commit 4aadc584fa7dcb2daa86b048c81dee0049ba26d9
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:07:00 2011 -0400
 
      internal change: index _bad_shares with IServer
 
   src/allmydata/mutable/servermap.py |   20 ++++++++++----------
   1 files changed, 10 insertions(+), 10 deletions(-)
 
  commit 16d4e6fa82a9907dbdc92094213387c6a4164e41
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:20:47 2011 +0100
 
      internal change: index _known_shares with IServer instead of serverid
 
      callers are unchanged
 
   src/allmydata/mutable/servermap.py |   42 +++++++++++++++----------
   1 files changed, 25 insertions(+), 17 deletions(-)
 
  commit ceeb5f4938cc814a0c75d1b8f4018aed965c2176
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:11:43 2011 +0100
 
      accessors and name cleanup for servermap.Servermap.last_update_mode/time
 
   src/allmydata/mutable/filenode.py  |    6 +++---
   src/allmydata/mutable/publish.py   |    4 ++--
   src/allmydata/mutable/servermap.py |   17 +++++++++++------
   3 files changed, 16 insertions(+), 11 deletions(-)
 
  commit 8d3cbda82661c0a7e5c3d3b65cf7a5d5ab7e32c0
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:11:14 2011 +0100
 
      accessors and name cleanup for servermap.Servermap.problems
 
   src/allmydata/mutable/servermap.py |   21 +++++++++++++--------
   src/allmydata/test/test_mutable.py |    6 +++---
   2 files changed, 16 insertions(+), 11 deletions(-)
 
  commit 348f57988f79389db0aab7672e6eaa9a6d8e3219
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:10:41 2011 +0100
 
      accessors and name cleanup for servermap.Servermap.bad_shares
 
   src/allmydata/mutable/publish.py   |    2 +-
   src/allmydata/mutable/servermap.py |   30 ++++++++++++++-----------
   2 files changed, 18 insertions(+), 14 deletions(-)
 
  commit 520c9368134673cdf76c653c5e1bb91c2ab5d51e
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:10:05 2011 +0100
 
      accessors and name cleanup for servermap.Servermap.servermap .
 
   src/allmydata/mutable/publish.py   |   14 +++++----
   src/allmydata/mutable/servermap.py |   38 ++++++++++++++-----------
   2 files changed, 29 insertions(+), 23 deletions(-)
 
  commit b8b8dc38287a91dbdf494426ac801d9381ce5841
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:08:02 2011 +0100
 
      fix reachable_servers
 
   src/allmydata/mutable/checker.py   |    3 ++-
   src/allmydata/mutable/publish.py   |    4 +++-
   src/allmydata/mutable/servermap.py |   12 ++++++++++--
   3 files changed, 15 insertions(+), 4 deletions(-)
 
  commit cb0cfd1adfefad357c187aaaf690c3df68b622bc
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:06:03 2011 +0100
 
      fix Servermap.unreachable_servers
 
   src/allmydata/mutable/servermap.py |   11 ++++++++---
   1 files changed, 8 insertions(+), 3 deletions(-)
 
  commit 2d9ea79b94bd4db674d40386fda90825785ac495
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:03:48 2011 +0100
 
      give ServerMap a StorageFarmBroker, temporary
 
      this makes it possible for the ServerMap to accept bare serverids and still
      build data structures with IServers
 
   src/allmydata/mutable/checker.py   |    2 +-
   src/allmydata/mutable/filenode.py  |    2 +-
   src/allmydata/mutable/publish.py   |    2 +-
   src/allmydata/mutable/servermap.py |    5 +++--
   src/allmydata/test/test_mutable.py |    8 ++++----
   5 files changed, 10 insertions(+), 9 deletions(-)
 
  commit 718d1aeff6fded893f65397806d22ece928b0dd4
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 13:43:30 2011 -0400
 
      add StorageFarmBroker.get_server_for_id(), temporary helper
 
      This will go away once we're passing IServers everywhere.
 
   src/allmydata/storage_client.py  |    2 ++
   src/allmydata/test/no_network.py |   13 +++++++++++++
   2 files changed, 15 insertions(+), 0 deletions(-)
 
  commit ece20231d7fda0d503704842a4aa068dfbc2e54e
  Author: Brian Warner <warner@lothar.com>
  Date:   Sun Oct 2 01:11:50 2011 +0100
 
      add proper accessors for Servermap.connections, to make refactoring easier
 
   src/allmydata/mutable/publish.py   |    6 +++---
   src/allmydata/mutable/retrieve.py  |   10 +++++-----
   src/allmydata/mutable/servermap.py |   17 +++++++++++------
   3 files changed, 19 insertions(+), 14 deletions(-)
 
  commit 3b943d6bf302ff702668081a612fc4fe2604cf9c
  Author: Brian Warner <warner@lothar.com>
  Date:   Fri Sep 23 10:34:30 2011 -0700
 
      mutable/servermap.py and neighbors: s/peer/server/
 
   src/allmydata/mutable/checker.py   |   22 +-
   src/allmydata/mutable/publish.py   |  204 +++++++-------
   src/allmydata/mutable/servermap.py |  402 +++++++++++++-------------
   src/allmydata/test/test_mutable.py |   18 +-
   4 files changed, 323 insertions(+), 323 deletions(-)
 IServer refactoring: pass IServer instances around, instead of peerids
 
 refs #1363
 
 This collapses 88 small incremental changes (each of which passes all tests)
 into one big patch. The development process for the long path started with
 adding some temporary scaffolding, changing one method at a time, then
 removing the scaffolding. The individual pieces are as follows, in reverse
 chronological order (the first patch is at the end of this comment):
 
  commit 9bbe4174fd0d98a6cf47a8ef96e85d9ef34b2f9a
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 16:05:00 2011 -0400
 
      immutable/downloader/status.py: correct comment
 
   src/allmydata/immutable/downloader/status.py |    2 +-
   1 files changed, 1 insertions(+), 1 deletions(-)
 
  commit 72146a7c7c91eac2f7c3ceb801eb7a1721376889
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 15:46:20 2011 -0400
 
      remove temporary ServerMap._storage_broker
 
   src/allmydata/mutable/checker.py   |    2 +-
   src/allmydata/mutable/filenode.py  |    2 +-
   src/allmydata/mutable/publish.py   |    2 +-
   src/allmydata/mutable/servermap.py |    5 ++---
   src/allmydata/test/test_mutable.py |    8 ++++----
   5 files changed, 9 insertions(+), 10 deletions(-)
 
  commit d703096b41632c47d76414b12672e076a422ff5c
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 15:37:05 2011 -0400
 
      remove temporary storage_broker.get_server_for_id()
 
   src/allmydata/storage_client.py  |    3 ---
   src/allmydata/test/no_network.py |   13 -------------
   2 files changed, 0 insertions(+), 16 deletions(-)
 
  commit 620cc5d80882ef6f7decfd26af8a6c7c1ddf80d1
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:50:06 2011 -0400
 
      API of Retrieve._try_to_validate_privkey(), trying to remove reader.server
 
   src/allmydata/mutable/retrieve.py |   10 +++++-----
   1 files changed, 5 insertions(+), 5 deletions(-)
 
  commit 92f43f856f4a8b36c207d1b190ed8699b5a4ecb4
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:48:08 2011 -0400
 
      API of Retrieve._validate_block(), trying to remove reader.server
 
   src/allmydata/mutable/retrieve.py |   14 +++++++-------
   1 files changed, 7 insertions(+), 7 deletions(-)
 
  commit 572d5070761861a2190349d1ed8d85dbc25698a5
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:36:58 2011 -0400
 
      API of Retrieve._mark_bad_share(), trying to remove reader.server
 
   src/allmydata/mutable/retrieve.py |   21 +++++++++------------
   1 files changed, 9 insertions(+), 12 deletions(-)
 
  commit a793ff00c0de1e2eec7b46288fdf388c7a2bec89
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:06:13 2011 -0400
 
      remove now-unused get_rref_for_serverid()
 
   src/allmydata/mutable/servermap.py |    3 ---
   1 files changed, 0 insertions(+), 3 deletions(-)
 
  commit 1b9827cc9366bf90b93297fdd6832f2ad0480ce7
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:03:09 2011 -0400
 
      Retrieve: stop adding .serverid attributes to readers
 
   src/allmydata/mutable/retrieve.py |    1 -
   1 files changed, 0 insertions(+), 1 deletions(-)
 
  commit 5d4e9d491b19e49d2e443a1dfff2c672842c36ef
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:03:34 2011 -0400
 
      return value of Retrieve(verify=True)
 
   src/allmydata/mutable/checker.py  |   11 ++++++-----
   src/allmydata/mutable/retrieve.py |    3 +--
   2 files changed, 7 insertions(+), 7 deletions(-)
 
  commit e9ab7978c384e1f677cb7779dc449b1044face82
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:54:23 2011 -0400
 
      Retrieve._bad_shares (but not return value, used by Verifier)
 
   src/allmydata/mutable/retrieve.py |    7 ++++---
   1 files changed, 4 insertions(+), 3 deletions(-)
 
  commit 2d91926de233ec5c881f30e36b4a30ad92ab42a9
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:51:23 2011 -0400
 
      Publish: stop adding .serverid attributes to writers
 
   src/allmydata/mutable/publish.py |    9 ++-------
   1 files changed, 2 insertions(+), 7 deletions(-)
 
  commit 47c7a0105dec7cbf4f7e0a3ce800bbb85b15df4a
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:56:33 2011 -0400
 
      API of get_write_enabler()
 
   src/allmydata/mutable/filenode.py |    7 ++++---
   src/allmydata/mutable/publish.py  |    4 ++--
   src/allmydata/test/no_network.py  |    3 +++
   3 files changed, 9 insertions(+), 5 deletions(-)
 
  commit 9196a5c6590fdbfd660325ea8358b345887d3db0
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:46:24 2011 -0400
 
      API of get_(renewal|cancel)_secret()
 
   src/allmydata/mutable/filenode.py  |   14 ++++++++------
   src/allmydata/mutable/publish.py   |    8 ++++----
   src/allmydata/mutable/servermap.py |    5 ++---
   3 files changed, 14 insertions(+), 13 deletions(-)
 
  commit de7c1552f8c163eff5b6d820b5fb3b21c1b47cb5
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:41:52 2011 -0400
 
      API of CorruptShareError. Also comment out some related+unused test_web.py code
 
   src/allmydata/mutable/common.py    |   13 +++++--------
   src/allmydata/mutable/retrieve.py  |   10 +++++-----
   src/allmydata/mutable/servermap.py |    8 +++-----
   src/allmydata/test/common.py       |   13 ++++++++-----
   4 files changed, 21 insertions(+), 23 deletions(-)
 
  commit 2c1c314046b620c16f1e66d030c150d768b7d01e
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 12:01:46 2011 -0400
 
      API of ServerMap.mark_bad_share()
 
   src/allmydata/mutable/publish.py   |    2 +-
   src/allmydata/mutable/retrieve.py  |    6 +++---
   src/allmydata/mutable/servermap.py |    6 ++----
   src/allmydata/test/test_mutable.py |    3 +--
   4 files changed, 7 insertions(+), 10 deletions(-)
 
  commit 1bed349030779fd0c378ae4e821384f953c6f6ff
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:11:17 2011 -0400
 
      API+name of ServerMap.shares_on_server() : only for tests, so debug_ prefix
 
   src/allmydata/mutable/servermap.py |    7 ++-----
   src/allmydata/test/test_mutable.py |    6 +++---
   2 files changed, 5 insertions(+), 8 deletions(-)
 
  commit 2d32e448677d6b818692e801045d4115b29abf21
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:07:10 2011 -0400
 
      API of ServerMap.all_servers_for_version()
 
   src/allmydata/mutable/servermap.py |    4 ++--
   1 files changed, 2 insertions(+), 2 deletions(-)
 
  commit 48f3204d1889c3e7179578125c4bdef515af3d6a
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:04:50 2011 -0400
 
      internals of ServerMap methods that use make_versionmap(), remove temp copy
 
   src/allmydata/mutable/servermap.py |   28 +++++++++----------------
   1 files changed, 10 insertions(+), 18 deletions(-)
 
  commit 5c3da77b6c777a145bd5ddfaa4db849dc9495548
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 11:01:28 2011 -0400
 
      API of ServerMap.make_versionmap()
 
   src/allmydata/mutable/checker.py   |    4 ++--
   src/allmydata/mutable/retrieve.py  |    5 ++---
   src/allmydata/mutable/servermap.py |    4 ++--
   src/allmydata/test/test_mutable.py |    7 ++++---
   4 files changed, 10 insertions(+), 10 deletions(-)
 
  commit b6882ece49afb4c507d118af2db346fa329209dc
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 10:53:38 2011 -0400
 
      make a copy of ServerMap.make_versionmap() (_make_versionmap2) for internal use
 
   src/allmydata/mutable/servermap.py |   18 +++++++++++++-----
   1 files changed, 13 insertions(+), 5 deletions(-)
 
  commit 963f8e63faf32b950eb1b8103cd2ff16fe8f0151
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:45:58 2011 -0400
 
      API of RetrieveStatus.add_problem()
 
   src/allmydata/mutable/retrieve.py |    5 +++--
   1 files changed, 3 insertions(+), 2 deletions(-)
 
  commit 4976d29ffae565a048851601c29013bbae2976d8
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:45:05 2011 -0400
 
      API of RetrieveStatus.add_fetch_timing()
 
   src/allmydata/mutable/retrieve.py |    5 +++--
   1 files changed, 3 insertions(+), 2 deletions(-)
 
  commit d057d3bbba72663ee148a8b916bc2d52be2e3982
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:44:04 2011 -0400
 
      API of Retrieve.notify_server_corruption()
 
   src/allmydata/mutable/retrieve.py |    6 +++---
   1 files changed, 3 insertions(+), 3 deletions(-)
 
  commit 8a2a81e46671c860610e0e96d6add1a57551f22d
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:42:32 2011 -0400
 
      remove unused _outstanding_queries
 
   src/allmydata/mutable/retrieve.py |    1 -
   1 files changed, 0 insertions(+), 1 deletions(-)
 
  commit 56d12cc9968d03ccd53764455c671122c4f391d1
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:40:57 2011 -0400
 
      change Retrieve.remaining_sharemap
 
   src/allmydata/mutable/retrieve.py |    4 ++--
   1 files changed, 2 insertions(+), 2 deletions(-)
 
  commit 4f0b7af4821f43290bfc70f2b1fc30149ad81281
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 10:40:18 2011 -0400
 
      accessor for PublishStatus._problems
 
   src/allmydata/mutable/publish.py |    4 +++-
   src/allmydata/web/status.py      |    2 +-
   2 files changed, 4 insertions(+), 2 deletions(-)
 
  commit 627087cf66d0b8cc519f4d551a967a7bd9b6a741
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 10:36:39 2011 -0400
 
      accessor for RetrieveStatus._problems
 
   src/allmydata/mutable/retrieve.py |    8 ++++++--
   src/allmydata/web/status.py       |    2 +-
   2 files changed, 7 insertions(+), 3 deletions(-)
 
  commit ca7dea81f03801b1c7353fc00ecba689268109cf
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:35:32 2011 -0400
 
      add .server to "reader", so we can get at it later
 
   src/allmydata/mutable/retrieve.py |    5 +++--
   1 files changed, 3 insertions(+), 2 deletions(-)
 
  commit 6ef516e24908ec195af084a7550d1921a5e983b0
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:32:32 2011 -0400
 
      temporarily give Retrieve a _storage_broker, so it can map serverids to servers
 
   src/allmydata/mutable/checker.py   |    3 ++-
   src/allmydata/mutable/filenode.py  |    6 ++++--
   src/allmydata/mutable/retrieve.py  |    5 +++--
   src/allmydata/test/test_mutable.py |    4 ++--
   4 files changed, 11 insertions(+), 7 deletions(-)
 
  commit afe08e4dd3f4ff9ff7e8a2a8d28b181e3625bcc9
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:21:51 2011 -0400
 
      mutable/retrieve.py: s/peer/server/
 
   src/allmydata/mutable/retrieve.py  |   82 +++++++++++++-------------
   src/allmydata/test/test_mutable.py |    6 +-
   2 files changed, 44 insertions(+), 44 deletions(-)
 
  commit 910afcb5d7f274880f68dd6cdb5b05f2bbc29adc
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:16:01 2011 -0400
 
      web.status.PublishStatusPage: add comment, I think .problems isn't exercised
 
   src/allmydata/web/status.py |    2 ++
   1 files changed, 2 insertions(+), 0 deletions(-)
 
  commit 311466dd8c931bbba40d590ade867704282e7f1a
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:48:16 2011 -0400
 
      API of PublishStatus.add_per_server_time()
 
   src/allmydata/mutable/publish.py |    5 +++--
   1 files changed, 3 insertions(+), 2 deletions(-)
 
  commit 2df5faa1b6cbfbaded520d2320305a62fe961118
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:46:37 2011 -0400
 
      more simplifications
 
   src/allmydata/mutable/publish.py |    4 +---
   1 files changed, 1 insertions(+), 3 deletions(-)
 
  commit 6ac4544a3da385f2aad9392f906b90192f4f919a
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:44:08 2011 -0400
 
      API of ServerMap.version_on_server()
 
   src/allmydata/mutable/publish.py   |    2 +-
   src/allmydata/mutable/servermap.py |    4 ++--
   src/allmydata/test/test_mutable.py |    5 ++---
   3 files changed, 5 insertions(+), 6 deletions(-)
 
  commit 3e187e322511072e4683329df6b2c6c733a66dba
  Author: Brian Warner <warner@lothar.com>
  Date:   Tue Oct 4 00:16:32 2011 -0400
 
      API of ServerMap.make_sharemap()
 
   src/allmydata/mutable/servermap.py |    4 ++--
   src/allmydata/test/test_mutable.py |    7 ++++---
   src/allmydata/web/status.py        |    4 ++--
   3 files changed, 8 insertions(+), 7 deletions(-)
 
  commit 318feed8437bdd8d4943c6569d38f7b54b6313cc
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:36:19 2011 -0400
 
      small cleanups
 
   src/allmydata/mutable/publish.py |    4 ++--
   1 files changed, 2 insertions(+), 2 deletions(-)
 
  commit bd459ed5714e1db5a7163935c54b7b0b56db8349
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:33:39 2011 -0400
 
      API of ServerMap.add_new_share()
 
   src/allmydata/mutable/publish.py   |    4 ++--
   src/allmydata/mutable/servermap.py |    6 ++----
   2 files changed, 4 insertions(+), 6 deletions(-)
 
  commit f2804fb6ed11d80088e0da8ed48e6c2922f2ffef
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:30:26 2011 -0400
 
      API of ServerMap.get_bad_shares()
 
   src/allmydata/mutable/publish.py   |    3 +--
   src/allmydata/mutable/servermap.py |    9 ++++-----
   2 files changed, 5 insertions(+), 7 deletions(-)
 
  commit 965074a47b3ce1431cb46d9a233840afcf9105f5
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:26:58 2011 -0400
 
      more small cleanups
 
   src/allmydata/mutable/publish.py |    6 +++---
   1 files changed, 3 insertions(+), 3 deletions(-)
 
  commit 38020da34f034f8889947dd3dc05e087ffff7106
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:18:47 2011 -0400
 
      change Publish.bad_share_checkstrings
 
   src/allmydata/mutable/publish.py |    6 +++---
   1 files changed, 3 insertions(+), 3 deletions(-)
 
  commit 5efebcbd2ee0c2f299ea86f7591d856c0f265304
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:16:31 2011 -0400
 
      change internals of Publish.update_goal()
 
   src/allmydata/mutable/publish.py |    8 +++-----
   1 files changed, 3 insertions(+), 5 deletions(-)
 
  commit e91b55ff4c2a69165b71f2c7b217ac319ff4c527
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:11:42 2011 -0400
 
      get rid of Publish.connections
 
   src/allmydata/mutable/publish.py |   27 +++++----------------------
   1 files changed, 5 insertions(+), 22 deletions(-)
 
  commit 64e9a53b3229ebe2f9ebf7ed502d539311d0e037
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:05:32 2011 -0400
 
      change Publish.bad_servers
 
   src/allmydata/mutable/publish.py |   10 +++++-----
   1 files changed, 5 insertions(+), 5 deletions(-)
 
  commit b85a934bef315a06bcfe00c9c12a3627fed2b918
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:03:07 2011 -0400
 
      Publish.bad_servers: fix bug, this should be a set of serverids, not writers
 
   src/allmydata/mutable/publish.py |    2 +-
   1 files changed, 1 insertions(+), 1 deletions(-)
 
  commit 605ea15ec15ed671513819003ccd211cdb9761e0
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 23:00:21 2011 -0400
 
      change .placed
 
   src/allmydata/mutable/publish.py |    6 +++---
   1 files changed, 3 insertions(+), 3 deletions(-)
 
  commit f7aba37b1b345d5b6d5cb16e3b3f6f3c1afb658e
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 22:59:22 2011 -0400
 
      temporarily stash IServer as .server on the "writer" object
 
   src/allmydata/mutable/publish.py |    2 ++
   1 files changed, 2 insertions(+), 0 deletions(-)
 
  commit f9b551d788e7db1f187fce5ab98ab5d5fe4e1c36
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 22:48:18 2011 -0400
 
      change Publish.goal and API of log_goal() to use IServer, not serverid
 
   src/allmydata/mutable/publish.py |   48 ++++++++++++++--------------
   1 files changed, 24 insertions(+), 24 deletions(-)
 
  commit 75f20616558e4900b8b1f685dd99aa838de6d452
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:27:02 2011 -0400
 
      API of ServerMap.get_known_shares()
 
   src/allmydata/mutable/publish.py   |   16 ++++++++++------
   src/allmydata/mutable/servermap.py |    7 ++-----
   2 files changed, 12 insertions(+), 11 deletions(-)
 
  commit 1c38c9d37bb08221b4418762234b1a62397b3b4b
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:20:29 2011 -0400
 
      Publish.full_serverlist
 
   src/allmydata/mutable/publish.py |   10 +++++-----
   1 files changed, 5 insertions(+), 5 deletions(-)
 
  commit b6cbd215a04b9cde31a7d92a97a7f048622b16f1
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:12:31 2011 -0400
 
      API of ServerMap.all_servers()
 
   src/allmydata/mutable/servermap.py |   19 ++++++-------------
   1 files changed, 6 insertions(+), 13 deletions(-)
 
  commit e63cd0315fae65357b1727ec6d5ff3c6e0d27c98
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:10:18 2011 -0400
 
      remove ServerMap.connections, set_rref_for_serverid()
 
   src/allmydata/mutable/servermap.py |   11 +----------
   1 files changed, 1 insertions(+), 10 deletions(-)
 
  commit 4df52db2f80eb12eefa5d57103c24893cde89553
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:04:06 2011 -0400
 
      API of ServerMap.mark_server_reachable()
 
   src/allmydata/mutable/servermap.py |    7 ++-----
   1 files changed, 2 insertions(+), 5 deletions(-)
 
  commit 69c715bde77944dc25181b3dbbeb042c816f9a1b
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:03:21 2011 -0400
 
      API of ServerMap.mark_server_unreachable()
 
   src/allmydata/mutable/servermap.py |    9 +++------
   1 files changed, 3 insertions(+), 6 deletions(-)
 
  commit 3d784d60eec1c508858e3a617e4411ffbcc3c1fa
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:02:03 2011 -0400
 
      API of status.set_privkey_from()
 
   src/allmydata/mutable/servermap.py |    7 +++----
   1 files changed, 3 insertions(+), 4 deletions(-)
 
  commit 544ed3ea29bed7e66da7fd29ca3f6f076f27a9e6
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:01:15 2011 -0400
 
      API of status.add_per_server_time()
 
   src/allmydata/mutable/servermap.py |    7 ++++---
   1 files changed, 4 insertions(+), 3 deletions(-)
 
  commit fffe5008b6320bd1e04c3c68389a2bf2ee383fa8
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:59:02 2011 -0400
 
      remove unused .versionmap
 
   src/allmydata/mutable/servermap.py |    7 -------
   1 files changed, 0 insertions(+), 7 deletions(-)
 
  commit 2816562e090d2294179db3588dafcca18de1bc2b
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:57:51 2011 -0400
 
      remove serverid from all log messages. Also one unused lambda.
 
   src/allmydata/mutable/servermap.py |   30 +++++++++++++-------------
   1 files changed, 15 insertions(+), 15 deletions(-)
 
  commit 28fa6b1a2738fa98c1f1dbd3d0e01ae98912d11f
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:54:30 2011 -0400
 
      removed unused _readers
 
   src/allmydata/mutable/servermap.py |    3 ---
   1 files changed, 0 insertions(+), 3 deletions(-)
 
  commit a8e4ed3d645ab592d1add6a1e69b6d1ebfb77817
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:54:16 2011 -0400
 
      remove unused _sharemap
 
   src/allmydata/mutable/servermap.py |    1 -
   1 files changed, 0 insertions(+), 1 deletions(-)
 
  commit 3f072e55cf1d0700f9fffe23f8f3a475725df588
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:49:03 2011 -0400
 
      _must_query
 
   src/allmydata/mutable/servermap.py |    8 ++++----
   1 files changed, 4 insertions(+), 4 deletions(-)
 
  commit c599a059b8df3f5785e4bf89fb6ecc6d8dcd708b
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:48:05 2011 -0400
 
      _queries_outstanding
 
   src/allmydata/mutable/servermap.py |   16 +++++++---------
   1 files changed, 7 insertions(+), 9 deletions(-)
 
  commit 7743759f98ac2c07926b2fdbd80bf52dfab33085
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:46:17 2011 -0400
 
      _empty_servers
 
   src/allmydata/mutable/servermap.py |    5 ++---
   1 files changed, 2 insertions(+), 3 deletions(-)
 
  commit 6bb1825916828a713a32cdf7f7411fa3ea2e1e5d
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:45:39 2011 -0400
 
      _good_servers
 
   src/allmydata/mutable/servermap.py |    4 ++--
   1 files changed, 2 insertions(+), 2 deletions(-)
 
  commit 1768fab1b51d8dd93ecabbaaabfadfa20cf6c3d4
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:44:59 2011 -0400
 
      _bad_servers
 
   src/allmydata/mutable/servermap.py |   14 +++++++-------
   1 files changed, 7 insertions(+), 7 deletions(-)
 
  commit dccbaef30f0ba714c746bf6d4a1a803c36e17b65
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:41:54 2011 -0400
 
      API of _try_to_set_pubkey()
 
   src/allmydata/mutable/servermap.py |    7 ++++---
   1 files changed, 4 insertions(+), 3 deletions(-)
 
  commit 0481ea70042ba3575f15eac7fd0780f8ece580cc
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:35:02 2011 -0400
 
      API of notify_server_corruption()
 
   src/allmydata/mutable/servermap.py |    6 +++---
   1 files changed, 3 insertions(+), 3 deletions(-)
 
  commit bea9cba18fb3b9c11bb22f18356a263ecec7351e
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:34:09 2011 -0400
 
      API of _got_signature_one_share()
 
   src/allmydata/mutable/servermap.py |    9 +++++----
   1 files changed, 5 insertions(+), 4 deletions(-)
 
  commit 1520123583cf78650706e114b15bb5b0ac1f4a14
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:32:33 2011 -0400
 
      API of _try_to_validate_privkey()
 
   src/allmydata/mutable/servermap.py |    9 +++++----
   1 files changed, 5 insertions(+), 4 deletions(-)
 
  commit 938852c9c8519c7a078f58a9b1f4dd8ec8b6715e
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:31:48 2011 -0400
 
      API and internals of _add_lease_failed()
 
   src/allmydata/mutable/servermap.py |    8 ++++----
   1 files changed, 4 insertions(+), 4 deletions(-)
 
  commit 3843dba367e3c19e176a622ab853cb51d2472ddf
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:30:37 2011 -0400
 
      API of _privkey_query_failed()
 
   src/allmydata/mutable/servermap.py |    5 +++--
   1 files changed, 3 insertions(+), 2 deletions(-)
 
  commit 2219a710e1633cd57d0ca0786490de87b3e19ba7
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:29:43 2011 -0400
 
      fix bug in call to _privkey_query_failed, unrelated to refactoring
 
   src/allmydata/mutable/servermap.py |    2 +-
   1 files changed, 1 insertions(+), 1 deletions(-)
 
  commit ae615bec7d0d1b269710b6902797b12f9592ad62
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:27:17 2011 -0400
 
      API of _got_corrupt_share()
 
   src/allmydata/mutable/servermap.py |   17 +++++++++--------
   1 files changed, 9 insertions(+), 8 deletions(-)
 
  commit cb51c95a6f4e077278157a77dab060c8c1ad7a81
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:23:16 2011 -0400
 
      API of _got_results()
 
   src/allmydata/mutable/servermap.py |    9 +++++----
   1 files changed, 5 insertions(+), 4 deletions(-)
 
  commit bac9154fe0af18f226999a58ffc2362d8cf4b802
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:19:19 2011 -0400
 
      API of _query_failed()
 
   src/allmydata/mutable/servermap.py |    5 +++--
   1 files changed, 3 insertions(+), 2 deletions(-)
 
  commit fdc29a8ca95d4b5c503e5382b9e5d4d02141ba12
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:17:20 2011 -0400
 
      API of _do_read()
 
   src/allmydata/mutable/servermap.py |    6 ++++--
   1 files changed, 4 insertions(+), 2 deletions(-)
 
  commit e7e9e338f28d004aa4d423d11c65f1e271ac7322
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:20:21 2011 -0400
 
      API of _do_query()
 
   src/allmydata/mutable/servermap.py |   15 +++++++--------
   1 files changed, 7 insertions(+), 8 deletions(-)
 
  commit 330625b9dac4cdbe72a11464a893065b9aeed453
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 14:43:05 2011 -0400
 
      next step: first batch of updates to ServermapUpdater
 
      updates:
       most method-local variables in update()
       API of _build_initial_querylist()
       API of _send_initial_requests()
       .full_serverlist
       .extra_servers
 
   src/allmydata/mutable/servermap.py |   39 ++++++++++++++------------
   1 files changed, 21 insertions(+), 18 deletions(-)
 
  commit 4aadc584fa7dcb2daa86b048c81dee0049ba26d9
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 15:07:00 2011 -0400
 
      internal change: index _bad_shares with IServer
 
   src/allmydata/mutable/servermap.py |   20 ++++++++++----------
   1 files changed, 10 insertions(+), 10 deletions(-)
 
  commit 16d4e6fa82a9907dbdc92094213387c6a4164e41
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:20:47 2011 +0100
 
      internal change: index _known_shares with IServer instead of serverid
 
      callers are unchanged
 
   src/allmydata/mutable/servermap.py |   42 +++++++++++++++----------
   1 files changed, 25 insertions(+), 17 deletions(-)
 
  commit ceeb5f4938cc814a0c75d1b8f4018aed965c2176
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:11:43 2011 +0100
 
      accessors and name cleanup for servermap.Servermap.last_update_mode/time
 
   src/allmydata/mutable/filenode.py  |    6 +++---
   src/allmydata/mutable/publish.py   |    4 ++--
   src/allmydata/mutable/servermap.py |   17 +++++++++++------
   3 files changed, 16 insertions(+), 11 deletions(-)
 
  commit 8d3cbda82661c0a7e5c3d3b65cf7a5d5ab7e32c0
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:11:14 2011 +0100
 
      accessors and name cleanup for servermap.Servermap.problems
 
   src/allmydata/mutable/servermap.py |   21 +++++++++++++--------
   src/allmydata/test/test_mutable.py |    6 +++---
   2 files changed, 16 insertions(+), 11 deletions(-)
 
  commit 348f57988f79389db0aab7672e6eaa9a6d8e3219
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:10:41 2011 +0100
 
      accessors and name cleanup for servermap.Servermap.bad_shares
 
   src/allmydata/mutable/publish.py   |    2 +-
   src/allmydata/mutable/servermap.py |   30 ++++++++++++++-----------
   2 files changed, 18 insertions(+), 14 deletions(-)
 
  commit 520c9368134673cdf76c653c5e1bb91c2ab5d51e
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:10:05 2011 +0100
 
      accessors and name cleanup for servermap.Servermap.servermap .
 
   src/allmydata/mutable/publish.py   |   14 +++++----
   src/allmydata/mutable/servermap.py |   38 ++++++++++++++-----------
   2 files changed, 29 insertions(+), 23 deletions(-)
 
  commit b8b8dc38287a91dbdf494426ac801d9381ce5841
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:08:02 2011 +0100
 
      fix reachable_servers
 
   src/allmydata/mutable/checker.py   |    3 ++-
   src/allmydata/mutable/publish.py   |    4 +++-
   src/allmydata/mutable/servermap.py |   12 ++++++++++--
   3 files changed, 15 insertions(+), 4 deletions(-)
 
  commit cb0cfd1adfefad357c187aaaf690c3df68b622bc
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:06:03 2011 +0100
 
      fix Servermap.unreachable_servers
 
   src/allmydata/mutable/servermap.py |   11 ++++++++---
   1 files changed, 8 insertions(+), 3 deletions(-)
 
  commit 2d9ea79b94bd4db674d40386fda90825785ac495
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 18:03:48 2011 +0100
 
      give ServerMap a StorageFarmBroker, temporary
 
      this makes it possible for the ServerMap to accept bare serverids and still
      build data structures with IServers
 
   src/allmydata/mutable/checker.py   |    2 +-
   src/allmydata/mutable/filenode.py  |    2 +-
   src/allmydata/mutable/publish.py   |    2 +-
   src/allmydata/mutable/servermap.py |    5 +++--
   src/allmydata/test/test_mutable.py |    8 ++++----
   5 files changed, 10 insertions(+), 9 deletions(-)
 
  commit 718d1aeff6fded893f65397806d22ece928b0dd4
  Author: Brian Warner <warner@lothar.com>
  Date:   Mon Oct 3 13:43:30 2011 -0400
 
      add StorageFarmBroker.get_server_for_id(), temporary helper
 
      This will go away once we're passing IServers everywhere.
 
   src/allmydata/storage_client.py  |    2 ++
   src/allmydata/test/no_network.py |   13 +++++++++++++
   2 files changed, 15 insertions(+), 0 deletions(-)
 
  commit ece20231d7fda0d503704842a4aa068dfbc2e54e
  Author: Brian Warner <warner@lothar.com>
  Date:   Sun Oct 2 01:11:50 2011 +0100
 
      add proper accessors for Servermap.connections, to make refactoring easier
 
   src/allmydata/mutable/publish.py   |    6 +++---
   src/allmydata/mutable/retrieve.py  |   10 +++++-----
   src/allmydata/mutable/servermap.py |   17 +++++++++++------
   3 files changed, 19 insertions(+), 14 deletions(-)
 
  commit 3b943d6bf302ff702668081a612fc4fe2604cf9c
  Author: Brian Warner <warner@lothar.com>
  Date:   Fri Sep 23 10:34:30 2011 -0700
 
      mutable/servermap.py and neighbors: s/peer/server/
 
   src/allmydata/mutable/checker.py   |   22 +-
   src/allmydata/mutable/publish.py   |  204 +++++++-------
   src/allmydata/mutable/servermap.py |  402 +++++++++++++-------------
   src/allmydata/test/test_mutable.py |   18 +-
   4 files changed, 323 insertions(+), 323 deletions(-)
] 
[TAG allmydata-tahoe-1.9.0
warner@lothar.com**20111031052301
 Ignore-this: cf598210dd1f314a1a121bf29a3d5918
] 
Patch bundle hash:
bf0451551ff7acaa3eb8429a0f228eada88ab0a2