Ticket #999: configure-backends-incomplete.dpatch

File configure-backends-incomplete.dpatch, 26.0 KB (added by zooko, at 2011-09-29T06:14:14Z)
Line 
11 patch for repository /home/zooko/playground/tahoe-lafs/999/dsv16:
2
3Thu Sep 29 00:12:21 MDT 2011  zooko@zooko.com
4  * very incomplete work: configure the S3 backend and slightly refactor backend configuration in general
5  configure backend type
6  configure S3Backend
7  remove the "debug_discard" attribute of DiskBackend in favor of using NullBackend for that purpose
8  the beginnings of tests of configuration
9
10New patches:
11
12[very incomplete work: configure the S3 backend and slightly refactor backend configuration in general
13zooko@zooko.com**20110929061221
14 Ignore-this: f2e19073bc5d10535584f4d6b2cdf6bd
15 configure backend type
16 configure S3Backend
17 remove the "debug_discard" attribute of DiskBackend in favor of using NullBackend for that purpose
18 the beginnings of tests of configuration
19] {
20hunk ./docs/backends/S3.rst 38
21     else, you may be able to use some other S3-like service if it is
22     sufficiently compatible.
23 
24-``s3.max_space = (quantity of space, optional)``
25+XXX TODO ``s3.max_space = (quantity of space, optional)``
26 
27     This tells the server to limit how much space can be used in the S3
28     bucket. Before each share is uploaded, the server will ask S3 for the
29hunk ./docs/configuration.rst 420
30 
31 ``backend = disk``
32 
33-    The default is to store shares on the local filesystem (in
34+    The storage server stores shares on the local filesystem (in
35     BASEDIR/storage/shares/). For configuration details (including how to
36     reserve a minimum amount of free space), see `<backends/disk.rst>`_.
37 
38hunk ./docs/configuration.rst 424
39-``backend = S3``
40+``backend = s3``
41 
42hunk ./docs/configuration.rst 426
43-    The storage server can store all shares to an Amazon Simple Storage
44-    Service (S3) bucket. For configuration details, see `<backends/S3.rst>`_.
45+    The storage server stores all shares to an Amazon Simple Storage Service
46+    (S3) bucket. For configuration details, see `<backends/S3.rst>`_.
47+
48+``backend = debug_discard``
49+
50+    The storage server stores all shares in /dev/null. This is actually used,
51+    for testing. It is not recommended for storage of data that you might
52+    want to retrieve in the future.
53 
54 
55 Running A Helper
56hunk ./src/allmydata/client.py 208
57         self._secret_holder = SecretHolder(lease_secret, self.convergence)
58 
59     def init_storage(self):
60-        # should we run a storage server (and publish it for others to use)?
61+        # Should we run a storage server (and publish it for others to use)?
62         if not self.get_config("storage", "enabled", True, boolean=True):
63             return
64         readonly = self.get_config("storage", "readonly", False, boolean=True)
65hunk ./src/allmydata/client.py 213
66 
67-        storedir = FilePath(self.basedir).child(self.STOREDIR)
68+        # What sort of backend?
69+        backendtype = self.get_config("storage", "backend", "disk"):
70 
71hunk ./src/allmydata/client.py 216
72-        data = self.get_config("storage", "reserved_space", None)
73-        reserved = None
74-        try:
75-            reserved = parse_abbreviated_size(data)
76-        except ValueError:
77-            log.msg("[storage]reserved_space= contains unparseable value %s"
78-                    % data)
79-        if reserved is None:
80-            reserved = 0
81-        discard = self.get_config("storage", "debug_discard", False,
82-                                  boolean=True)
83+        def config_disk_backend():
84+            storedir = FilePath(self.basedir).child(self.STOREDIR)
85+
86+            data = self.get_config("storage", "reserved_space", None)
87+            reserved = None
88+            try:
89+                reserved = parse_abbreviated_size(data)
90+            except ValueError:
91+                raise InvalidValueError("[storage]reserved_space= contains unparseable value %s"
92+                                        % data)
93+
94+            return DiskBackend(storedir, readonly, reserved)
95+
96+        def config_s3_backend():
97+            accesskeyid = self.get_config("storage", "backends", "s3.access_key_id")
98+            secretaccesskey = self.get_or_create_private_config("s3secret")
99+            bucket = self.get_config("storage", "backends", "s3.bucket")
100+            s3url = self.get_config("storage", "backends", "s3.url", "http://s3.amazonaws.com")
101+
102+            backend = S3Backend(accesskeyid, bucket, s3url, secretaccesskey)
103+
104+        def config_null_backend():
105+            return NullBackend()
106+
107+        backend_configgers = {
108+            'disk': config_disk_backend,
109+            's3': config_s3_backend,
110+            'debug_discard': config_null_backend,
111+            }
112+
113+        if backendtype not in backend_configgers:
114+            raise InvalidValueError("[storage]backend= is required to be one of %s, but was \"%s\"" % (backend_configgers.keys(), quote_output(backendtype),))
115+           
116+
117+        if backendtype == "disk":
118+        elif backendtype == "s3":
119+        elif backendtype == "debug_discard":
120 
121         expire = self.get_config("storage", "expire.enabled", False, boolean=True)
122         if expire:
123hunk ./src/allmydata/node.py 43
124 class _None: # used as a marker in get_config()
125     pass
126 
127+class InvalidValueError(Exception):
128+    """ The configured value was not valid. """
129+
130 class MissingConfigEntry(Exception):
131     """ A required config entry was not found. """
132 
133hunk ./src/allmydata/storage/backends/disk/disk_backend.py 51
134 class DiskBackend(Backend):
135     implements(IStorageBackend)
136 
137-    def __init__(self, storedir, readonly=False, reserved_space=0, discard_storage=False):
138+    def __init__(self, storedir, readonly=False, reserved_space=0):
139         Backend.__init__(self)
140         self._setup_storage(storedir, readonly, reserved_space, discard_storage)
141         self._setup_corruption_advisory()
142hunk ./src/allmydata/test/test_backends.py 6
143 from allmydata.util.log import msg
144 from allmydata.test.common_util import ReallyEqualMixin
145 import mock
146+from allmydata import node
147 
148 # This is the code that we're going to be testing.
149 from allmydata.storage.server import StorageServer
150hunk ./src/allmydata/test/test_backends.py 378
151         self.failUnlessReallyEqual(b.remote_read(0, datalen+20), client_data)
152         # If you start reading past the end of the file you get the empty string.
153         self.failUnlessReallyEqual(b.remote_read(datalen+1, 3), '')
154+
155+class MockConfigParser(object):
156+    def __init__(self, configged_vals):
157+        self.configged_vals = configged_vals
158+    def read(self, fname):
159+        pass
160+    def getboolean(self, section, option):
161+        xxx
162+    def get(self, section, option):
163+        return self.configged_vals[(section, option)]
164+
165+class TestConfigureBackends(ReallyEqualMixin, unittest.TestCase):
166+    @mock.patch('ConfigParser.SafeConfigParser')
167+    def test_configure_disk_backend_bad_reserved_space(self, mockCP):
168+        mockCP.return_value = MockConfigParser({
169+                ("storage", "backend"): "disk",
170+                ("storage", "reserved_space"): "not a real answer",
171+                })
172+
173+        self.failUnlessRaises(node.MissingConfigEntry, Client)
174hunk ./src/allmydata/uri.py 1069
175             unpacked[k] = base32.b2a(unpacked[k])
176     return unpacked
177 
178-
179}
180
181Context:
182
183[More fixes to tests needed for pluggable backends. refs #999
184david-sarah@jacaranda.org**20110921184649
185 Ignore-this: 9be0d3a98e350fd4e17a07d2c00bb4ca
186] 
187[docs/backends/S3.rst, disk.rst: describe type of space settings as 'quantity of space', not 'str'. refs #999
188david-sarah@jacaranda.org**20110921031705
189 Ignore-this: a74ed8e01b0a1ab5f07a1487d7bf138
190] 
191[docs/backends/S3.rst: remove Issues section. refs #999
192david-sarah@jacaranda.org**20110921031625
193 Ignore-this: c83d8f52b790bc32488869e6ee1df8c2
194] 
195[Fix some incorrect attribute accesses. refs #999
196david-sarah@jacaranda.org**20110921031207
197 Ignore-this: f1ea4c3ea191f6d4b719afaebd2b2bcd
198] 
199[docs/backends: document the configuration options for the pluggable backends scheme. refs #999
200david-sarah@jacaranda.org**20110920171737
201 Ignore-this: 5947e864682a43cb04e557334cda7c19
202] 
203[Work-in-progress, includes fix to bug involving BucketWriter. refs #999
204david-sarah@jacaranda.org**20110920033803
205 Ignore-this: 64e9e019421454e4d08141d10b6e4eed
206] 
207[Pluggable backends -- all other changes. refs #999
208david-sarah@jacaranda.org**20110919233256
209 Ignore-this: 1a77b6b5d178b32a9b914b699ba7e957
210] 
211[Pluggable backends -- new and moved files, changes to moved files. refs #999
212david-sarah@jacaranda.org**20110919232926
213 Ignore-this: ec5d2d1362a092d919e84327d3092424
214] 
215[interfaces.py: 'which -> that' grammar cleanup.
216david-sarah@jacaranda.org**20110825003217
217 Ignore-this: a3e15f3676de1b346ad78aabdfb8cac6
218] 
219[test/test_mutable: write publish surprise test for MDMF, rename existing test_publish_surprise to clarify that it is for SDMF
220kevan@isnotajoke.com**20110918003657
221 Ignore-this: 722c507e8f5b537ff920e0555951059a
222] 
223[test/test_mutable: refactor publish surprise test into common test fixture, rewrite test_publish_surprise to use test fixture
224kevan@isnotajoke.com**20110918003533
225 Ignore-this: 6f135888d400a99a09b5f9a4be443b6e
226] 
227[mutable/publish: add errback immediately after write, don't consume errors from other parts of the publisher
228kevan@isnotajoke.com**20110917234708
229 Ignore-this: 12bf6b0918a5dc5ffc30ece669fad51d
230] 
231[.darcs-boringfile: minor cleanups.
232david-sarah@jacaranda.org**20110920154918
233 Ignore-this: cab78e30d293da7e2832207dbee2ffeb
234] 
235[uri.py: fix two interface violations in verifier URI classes. refs #1474
236david-sarah@jacaranda.org**20110920030156
237 Ignore-this: 454ddd1419556cb1d7576d914cb19598
238] 
239[Make platform-detection code tolerate linux-3.0, patch by zooko.
240Brian Warner <warner@lothar.com>**20110915202620
241 Ignore-this: af63cf9177ae531984dea7a1cad03762
242 
243 Otherwise address-autodetection can't find ifconfig. refs #1536
244] 
245[test_web.py: fix a bug in _count_leases that was causing us to check only the lease count of one share file, not of all share files as intended.
246david-sarah@jacaranda.org**20110915185126
247 Ignore-this: d96632bc48d770b9b577cda1bbd8ff94
248] 
249[docs: insert a newline at the beginning of known_issues.rst to see if this makes it render more nicely in trac
250zooko@zooko.com**20110914064728
251 Ignore-this: aca15190fa22083c5d4114d3965f5d65
252] 
253[docs: remove the coding: utf-8 declaration at the to of known_issues.rst, since the trac rendering doesn't hide it
254zooko@zooko.com**20110914055713
255 Ignore-this: 941ed32f83ead377171aa7a6bd198fcf
256] 
257[docs: more cleanup of known_issues.rst -- now it passes "rst2html --verbose" without comment
258zooko@zooko.com**20110914055419
259 Ignore-this: 5505b3d76934bd97d0312cc59ed53879
260] 
261[docs: more formatting improvements to known_issues.rst
262zooko@zooko.com**20110914051639
263 Ignore-this: 9ae9230ec9a38a312cbacaf370826691
264] 
265[docs: reformatting of known_issues.rst
266zooko@zooko.com**20110914050240
267 Ignore-this: b8be0375079fb478be9d07500f9aaa87
268] 
269[docs: fix formatting error in docs/known_issues.rst
270zooko@zooko.com**20110914045909
271 Ignore-this: f73fe74ad2b9e655aa0c6075acced15a
272] 
273[merge Tahoe-LAFS v1.8.3 release announcement with trunk
274zooko@zooko.com**20110913210544
275 Ignore-this: 163f2c3ddacca387d7308e4b9332516e
276] 
277[docs: release notes for Tahoe-LAFS v1.8.3
278zooko@zooko.com**20110913165826
279 Ignore-this: 84223604985b14733a956d2fbaeb4e9f
280] 
281[tests: bump up the timeout in this test that fails on FreeStorm's CentOS in order to see if it is just very slow
282zooko@zooko.com**20110913024255
283 Ignore-this: 6a86d691e878cec583722faad06fb8e4
284] 
285[interfaces: document that the 'fills-holes-with-zero-bytes' key should be used to detect whether a storage server has that behavior. refs #1528
286david-sarah@jacaranda.org**20110913002843
287 Ignore-this: 1a00a6029d40f6792af48c5578c1fd69
288] 
289[CREDITS: more CREDITS for Kevan and David-Sarah
290zooko@zooko.com**20110912223357
291 Ignore-this: 4ea8f0d6f2918171d2f5359c25ad1ada
292] 
293[merge NEWS about the mutable file bounds fixes with NEWS about work-in-progress
294zooko@zooko.com**20110913205521
295 Ignore-this: 4289a4225f848d6ae6860dd39bc92fa8
296] 
297[doc: add NEWS item about fixes to potential palimpsest issues in mutable files
298zooko@zooko.com**20110912223329
299 Ignore-this: 9d63c95ddf95c7d5453c94a1ba4d406a
300 ref. #1528
301] 
302[merge the NEWS about the security fix (#1528) with the work-in-progress NEWS
303zooko@zooko.com**20110913205153
304 Ignore-this: 88e88a2ad140238c62010cf7c66953fc
305] 
306[doc: add NEWS entry about the issue which allows unauthorized deletion of shares
307zooko@zooko.com**20110912223246
308 Ignore-this: 77e06d09103d2ef6bb51ea3e5d6e80b0
309 ref. #1528
310] 
311[doc: add entry in known_issues.rst about the issue which allows unauthorized deletion of shares
312zooko@zooko.com**20110912223135
313 Ignore-this: b26c6ea96b6c8740b93da1f602b5a4cd
314 ref. #1528
315] 
316[storage: more paranoid handling of bounds and palimpsests in mutable share files
317zooko@zooko.com**20110912222655
318 Ignore-this: a20782fa423779ee851ea086901e1507
319 * storage server ignores requests to extend shares by sending a new_length
320 * storage server fills exposed holes (created by sending a write vector whose offset begins after the end of the current data) with 0 to avoid "palimpsest" exposure of previous contents
321 * storage server zeroes out lease info at the old location when moving it to a new location
322 ref. #1528
323] 
324[storage: test that the storage server ignores requests to extend shares by sending a new_length, and that the storage server fills exposed holes with 0 to avoid "palimpsest" exposure of previous contents
325zooko@zooko.com**20110912222554
326 Ignore-this: 61ebd7b11250963efdf5b1734a35271
327 ref. #1528
328] 
329[immutable: prevent clients from reading past the end of share data, which would allow them to learn the cancellation secret
330zooko@zooko.com**20110912222458
331 Ignore-this: da1ebd31433ea052087b75b2e3480c25
332 Declare explicitly that we prevent this problem in the server's version dict.
333 fixes #1528 (there are two patches that are each a sufficient fix to #1528 and this is one of them)
334] 
335[storage: remove the storage server's "remote_cancel_lease" function
336zooko@zooko.com**20110912222331
337 Ignore-this: 1c32dee50e0981408576daffad648c50
338 We're removing this function because it is currently unused, because it is dangerous, and because the bug described in #1528 leaks the cancellation secret, which allows anyone who knows a file's storage index to abuse this function to delete shares of that file.
339 fixes #1528 (there are two patches that are each a sufficient fix to #1528 and this is one of them)
340] 
341[storage: test that the storage server does *not* have a "remote_cancel_lease" function
342zooko@zooko.com**20110912222324
343 Ignore-this: 21c652009704652d35f34651f98dd403
344 We're removing this function because it is currently unused, because it is dangerous, and because the bug described in #1528 leaks the cancellation secret, which allows anyone who knows a file's storage index to abuse this function to delete shares of that file.
345 ref. #1528
346] 
347[immutable: test whether the server allows clients to read past the end of share data, which would allow them to learn the cancellation secret
348zooko@zooko.com**20110912221201
349 Ignore-this: 376e47b346c713d37096531491176349
350 Also test whether the server explicitly declares that it prevents this problem.
351 ref #1528
352] 
353[Retrieve._activate_enough_peers: rewrite Verify logic
354Brian Warner <warner@lothar.com>**20110909181150
355 Ignore-this: 9367c11e1eacbf025f75ce034030d717
356] 
357[Retrieve: implement/test stopProducing
358Brian Warner <warner@lothar.com>**20110909181150
359 Ignore-this: 47b2c3df7dc69835e0a066ca12e3c178
360] 
361[move DownloadStopped from download.common to interfaces
362Brian Warner <warner@lothar.com>**20110909181150
363 Ignore-this: 8572acd3bb16e50341dbed8eb1d90a50
364] 
365[retrieve.py: remove vestigal self._validated_readers
366Brian Warner <warner@lothar.com>**20110909181150
367 Ignore-this: faab2ec14e314a53a2ffb714de626e2d
368] 
369[Retrieve: rewrite flow-control: use a top-level loop() to catch all errors
370Brian Warner <warner@lothar.com>**20110909181150
371 Ignore-this: e162d2cd53b3d3144fc6bc757e2c7714
372 
373 This ought to close the potential for dropped errors and hanging downloads.
374 Verify needs to be examined, I may have broken it, although all tests pass.
375] 
376[Retrieve: merge _validate_active_prefixes into _add_active_peers
377Brian Warner <warner@lothar.com>**20110909181150
378 Ignore-this: d3ead31e17e69394ae7058eeb5beaf4c
379] 
380[Retrieve: remove the initial prefix-is-still-good check
381Brian Warner <warner@lothar.com>**20110909181150
382 Ignore-this: da66ee51c894eaa4e862e2dffb458acc
383 
384 This check needs to be done with each fetch from the storage server, to
385 detect when someone has changed the share (i.e. our servermap goes stale).
386 Doing it just once at the beginning of retrieve isn't enough: a write might
387 occur after the first segment but before the second, etc.
388 
389 _try_to_validate_prefix() was not removed: it will be used by the future
390 check-with-each-fetch code.
391 
392 test_mutable.Roundtrip.test_corrupt_all_seqnum_late was disabled, since it
393 fails until this check is brought back. (the corruption it applies only
394 touches the prefix, not the block data, so the check-less retrieve actually
395 tolerates it). Don't forget to re-enable it once the check is brought back.
396] 
397[MDMFSlotReadProxy: remove the queue
398Brian Warner <warner@lothar.com>**20110909181150
399 Ignore-this: 96673cb8dda7a87a423de2f4897d66d2
400 
401 This is a neat trick to reduce Foolscap overhead, but the need for an
402 explicit flush() complicates the Retrieve path and makes it prone to
403 lost-progress bugs.
404 
405 Also change test_mutable.FakeStorageServer to tolerate multiple reads of the
406 same share in a row, a limitation exposed by turning off the queue.
407] 
408[rearrange Retrieve: first step, shouldn't change order of execution
409Brian Warner <warner@lothar.com>**20110909181149
410 Ignore-this: e3006368bfd2802b82ea45c52409e8d6
411] 
412[CLI: test_cli.py -- remove an unnecessary call in test_mkdir_mutable_type. refs #1527
413david-sarah@jacaranda.org**20110906183730
414 Ignore-this: 122e2ffbee84861c32eda766a57759cf
415] 
416[CLI: improve test for 'tahoe mkdir --mutable-type='. refs #1527
417david-sarah@jacaranda.org**20110906183020
418 Ignore-this: f1d4598e6c536f0a2b15050b3bc0ef9d
419] 
420[CLI: make the --mutable-type option value for 'tahoe put' and 'tahoe mkdir' case-insensitive, and change --help for these commands accordingly. fixes #1527
421david-sarah@jacaranda.org**20110905020922
422 Ignore-this: 75a6df0a2df9c467d8c010579e9a024e
423] 
424[cli: make --mutable-type imply --mutable in 'tahoe put'
425Kevan Carstensen <kevan@isnotajoke.com>**20110903190920
426 Ignore-this: 23336d3c43b2a9554e40c2a11c675e93
427] 
428[SFTP: add a comment about a subtle interaction between OverwriteableFileConsumer and GeneralSFTPFile, and test the case it is commenting on.
429david-sarah@jacaranda.org**20110903222304
430 Ignore-this: 980c61d4dd0119337f1463a69aeebaf0
431] 
432[improve the storage/mutable.py asserts even more
433warner@lothar.com**20110901160543
434 Ignore-this: 5b2b13c49bc4034f96e6e3aaaa9a9946
435] 
436[storage/mutable.py: special characters in struct.foo arguments indicate standard as opposed to native sizes, we should be using these characters in these asserts
437wilcoxjg@gmail.com**20110901084144
438 Ignore-this: 28ace2b2678642e4d7269ddab8c67f30
439] 
440[docs/write_coordination.rst: fix formatting and add more specific warning about access via sshfs.
441david-sarah@jacaranda.org**20110831232148
442 Ignore-this: cd9c851d3eb4e0a1e088f337c291586c
443] 
444[test_mutable.Version: consolidate some tests, reduce runtime from 19s to 15s
445warner@lothar.com**20110831050451
446 Ignore-this: 64815284d9e536f8f3798b5f44cf580c
447] 
448[mutable/retrieve: handle the case where self._read_length is 0.
449Kevan Carstensen <kevan@isnotajoke.com>**20110830210141
450 Ignore-this: fceafbe485851ca53f2774e5a4fd8d30
451 
452 Note that the downloader will still fetch a segment for a zero-length
453 read, which is wasteful. Fixing that isn't specifically required to fix
454 #1512, but it should probably be fixed before 1.9.
455] 
456[NEWS: added summary of all changes since 1.8.2. Needs editing.
457Brian Warner <warner@lothar.com>**20110830163205
458 Ignore-this: 273899b37a899fc6919b74572454b8b2
459] 
460[test_mutable.Update: only upload the files needed for each test. refs #1500
461Brian Warner <warner@lothar.com>**20110829072717
462 Ignore-this: 4d2ab4c7523af9054af7ecca9c3d9dc7
463 
464 This first step shaves 15% off the runtime: from 139s to 119s on my laptop.
465 It also fixes a couple of places where a Deferred was being dropped, which
466 would cause two tests to run in parallel and also confuse error reporting.
467] 
468[Let Uploader retain History instead of passing it into upload(). Fixes #1079.
469Brian Warner <warner@lothar.com>**20110829063246
470 Ignore-this: 3902c58ec12bd4b2d876806248e19f17
471 
472 This consistently records all immutable uploads in the Recent Uploads And
473 Downloads page, regardless of code path. Previously, certain webapi upload
474 operations (like PUT /uri/$DIRCAP/newchildname) failed to pass the History
475 object and were left out.
476] 
477[Fix mutable publish/retrieve timing status displays. Fixes #1505.
478Brian Warner <warner@lothar.com>**20110828232221
479 Ignore-this: 4080ce065cf481b2180fd711c9772dd6
480 
481 publish:
482 * encrypt and encode times are cumulative, not just current-segment
483 
484 retrieve:
485 * same for decrypt and decode times
486 * update "current status" to include segment number
487 * set status to Finished/Failed when download is complete
488 * set progress to 1.0 when complete
489 
490 More improvements to consider:
491 * progress is currently 0% or 100%: should calculate how many segments are
492   involved (remembering retrieve can be less than the whole file) and set it
493   to a fraction
494 * "fetch" time is fuzzy: what we want is to know how much of the delay is not
495   our own fault, but since we do decode/decrypt work while waiting for more
496   shares, it's not straightforward
497] 
498[Teach 'tahoe debug catalog-shares about MDMF. Closes #1507.
499Brian Warner <warner@lothar.com>**20110828080931
500 Ignore-this: 56ef2951db1a648353d7daac6a04c7d1
501] 
502[debug.py: remove some dead comments
503Brian Warner <warner@lothar.com>**20110828074556
504 Ignore-this: 40e74040dd4d14fd2f4e4baaae506b31
505] 
506[hush pyflakes
507Brian Warner <warner@lothar.com>**20110828074254
508 Ignore-this: bef9d537a969fa82fe4decc4ba2acb09
509] 
510[MutableFileNode.set_downloader_hints: never depend upon order of dict.values()
511Brian Warner <warner@lothar.com>**20110828074103
512 Ignore-this: caaf1aa518dbdde4d797b7f335230faa
513 
514 The old code was calculating the "extension parameters" (a list) from the
515 downloader hints (a dictionary) with hints.values(), which is not stable, and
516 would result in corrupted filecaps (with the 'k' and 'segsize' hints
517 occasionally swapped). The new code always uses [k,segsize].
518] 
519[layout.py: fix MDMF share layout documentation
520Brian Warner <warner@lothar.com>**20110828073921
521 Ignore-this: 3f13366fed75b5e31b51ae895450a225
522] 
523[teach 'tahoe debug dump-share' about MDMF and offsets. refs #1507
524Brian Warner <warner@lothar.com>**20110828073834
525 Ignore-this: 3a9d2ef9c47a72bf1506ba41199a1dea
526] 
527[test_mutable.Version.test_debug: use splitlines() to fix buildslaves
528Brian Warner <warner@lothar.com>**20110828064728
529 Ignore-this: c7f6245426fc80b9d1ae901d5218246a
530 
531 Any slave running in a directory with spaces in the name was miscounting
532 shares, causing the test to fail.
533] 
534[test_mutable.Version: exercise 'tahoe debug find-shares' on MDMF. refs #1507
535Brian Warner <warner@lothar.com>**20110828005542
536 Ignore-this: cb20bea1c28bfa50a72317d70e109672
537 
538 Also changes NoNetworkGrid to put shares in storage/shares/ .
539] 
540[test_mutable.py: oops, missed a .todo
541Brian Warner <warner@lothar.com>**20110828002118
542 Ignore-this: fda09ae86481352b7a627c278d2a3940
543] 
544[test_mutable: merge davidsarah's patch with my Version refactorings
545warner@lothar.com**20110827235707
546 Ignore-this: b5aaf481c90d99e33827273b5d118fd0
547] 
548[Make the immutable/read-only constraint checking for MDMF URIs identical to that for SSK URIs. refs #393
549david-sarah@jacaranda.org**20110823012720
550 Ignore-this: e1f59d7ff2007c81dbef2aeb14abd721
551] 
552[Additional tests for MDMF URIs and for zero-length files. refs #393
553david-sarah@jacaranda.org**20110823011532
554 Ignore-this: a7cc0c09d1d2d72413f9cd227c47a9d5
555] 
556[Additional tests for zero-length partial reads and updates to mutable versions. refs #393
557david-sarah@jacaranda.org**20110822014111
558 Ignore-this: 5fc6f4d06e11910124e4a277ec8a43ea
559] 
560[test_mutable.Version: factor out some expensive uploads, save 25% runtime
561Brian Warner <warner@lothar.com>**20110827232737
562 Ignore-this: ea37383eb85ea0894b254fe4dfb45544
563] 
564[SDMF: update filenode with correct k/N after Retrieve. Fixes #1510.
565Brian Warner <warner@lothar.com>**20110827225031
566 Ignore-this: b50ae6e1045818c400079f118b4ef48
567 
568 Without this, we get a regression when modifying a mutable file that was
569 created with more shares (larger N) than our current tahoe.cfg . The
570 modification attempt creates new versions of the (0,1,..,newN-1) shares, but
571 leaves the old versions of the (newN,..,oldN-1) shares alone (and throws a
572 assertion error in SDMFSlotWriteProxy.finish_publishing in the process).
573 
574 The mixed versions that result (some shares with e.g. N=10, some with N=20,
575 such that both versions are recoverable) cause problems for the Publish code,
576 even before MDMF landed. Might be related to refs #1390 and refs #1042.
577] 
578[layout.py: annotate assertion to figure out 'tahoe backup' failure
579Brian Warner <warner@lothar.com>**20110827195253
580 Ignore-this: 9b92b954e3ed0d0f80154fff1ff674e5
581] 
582[Add 'tahoe debug dump-cap' support for MDMF, DIR2-CHK, DIR2-MDMF. refs #1507.
583Brian Warner <warner@lothar.com>**20110827195048
584 Ignore-this: 61c6af5e33fc88e0251e697a50addb2c
585 
586 This also adds tests for all those cases, and fixes an omission in uri.py
587 that broke parsing of DIR2-MDMF-Verifier and DIR2-CHK-Verifier.
588] 
589[MDMF: more writable/writeable consistentifications
590warner@lothar.com**20110827190602
591 Ignore-this: 22492a9e20c1819ddb12091062888b55
592] 
593[MDMF: s/Writable/Writeable/g, for consistency with existing SDMF code
594warner@lothar.com**20110827183357
595 Ignore-this: 9dd312acedbdb2fc2f7bef0d0fb17c0b
596] 
597[setup.cfg: remove no-longer-supported test_mac_diskimage alias. refs #1479
598david-sarah@jacaranda.org**20110826230345
599 Ignore-this: 40e908b8937322a290fb8012bfcad02a
600] 
601[test_mutable.Update: increase timeout from 120s to 400s, slaves are failing
602Brian Warner <warner@lothar.com>**20110825230140
603 Ignore-this: 101b1924a30cdbda9b2e419e95ca15ec
604] 
605[tests: fix check_memory test
606zooko@zooko.com**20110825201116
607 Ignore-this: 4d66299fa8cb61d2ca04b3f45344d835
608 fixes #1503
609] 
610[TAG allmydata-tahoe-1.9.0a1
611warner@lothar.com**20110825161122
612 Ignore-this: 3cbf49f00dbda58189f893c427f65605
613] 
614Patch bundle hash:
615c2441cc8c69418f4ce7e0b60e3370151b0940b97