This release adds the 'tahoe create-alias' command, which is a combination of
'tahoe mkdir' and 'tahoe add-alias'. This also allows you to start using a
new tahoe directory without exposing its URI in the argv list, which is
-publicly visible (through the process table) on most unix systems.
+publicly visible (through the process table) on most unix systems. Thanks to
+Kevin Reid for bringing this issue to our attention.
The single-argument form of "tahoe put" was changed to create an unlinked
file. I.e. "tahoe put bar.txt" will take the contents of a local "bar.txt"
* make sure debs got built and uploaded properly
* make sure a sumo sdist tarball got built and uploaded properly
* send out relnotes.txt
- x + tahoe-announce@lists.allmydata.org, tahoe-dev@lists.allmydata.org, p2p-hackers@lists.zooko.com, lwn@lwn.net, cap-talk@mail.eros-os.org, cryptography@metzdown.com, twisted-python@twistedmatrix.com, fuse-devel@lists.sourceforge.net, duplicity-talk@nongnu.org, news@phoronix.com
+ x + tahoe-announce@lists.allmydata.org, tahoe-dev@lists.allmydata.org, p2p-hackers@lists.zooko.com, lwn@lwn.net, cap-talk@mail.eros-os.org, cryptography@metzdown.com, twisted-python@twistedmatrix.com, fuse-devel@lists.sourceforge.net, duplicity-talk@nongnu.org, news@phoronix.com, python-list@python.org
* update Wiki: front page news, news, old news, parade of release notes
* update "current version" information and make an "announcement of new release" on freshmeat
* upload to pypi with "make make-version && python ./setup.py sdist upload register"
def get_data():
- """Return a dictionary that describes the state of the file/dir. Non-distributed LIT
+ """Return a dictionary that describes the state of the file/dir. LIT
files always return an empty dictionary. Normal files and directories return a
dictionary with the following keys (note that these use binary strings rather than
base32-encoded ones) (also note that for mutable files, these counts are for the 'best'
d2 = filenode.check(Monitor(), verify=True)
def _after_check(checkresults):
after_check_reads = self._count_reads()
- # print "delta was ", after_check_reads - before_check_reads
- self.failIf(after_check_reads - before_check_reads > DELTA_READS)
+ self.failIf(after_check_reads - before_check_reads > DELTA_READS, (after_check_reads, before_check_reads, DELTA_READS))
self.failUnless(checkresults.is_healthy())
d2.addCallback(_after_check)
def _after_check(checkresults):
after_check_reads = self._count_reads()
- # print "delta was ", after_check_reads - before_check_reads
self.failIf(after_check_reads - before_check_reads > DELTA_READS)
self.failIf(checkresults.is_healthy())
def check_and_repair_is_healthy(self, cr, n, where, incomplete=False):
- self.failUnless(ICheckAndRepairResults.providedBy(cr), where)
+ self.failUnless(ICheckAndRepairResults.providedBy(cr), (where, cr))
self.failUnless(cr.get_pre_repair_results().is_healthy(), where)
self.check_is_healthy(cr.get_pre_repair_results(), n, where, incomplete)
self.failUnless(cr.get_post_repair_results().is_healthy(), where)
d.addCallback(lambda ign: self.mutable.check(Monitor(), verify=True))
d.addCallback(self.check_is_healthy, self.mutable, "mutable")
d.addCallback(lambda ign: self.large.check(Monitor(), verify=True))
- d.addCallback(self.check_is_healthy, self.large, "large",
- incomplete=True)
+ d.addCallback(self.check_is_healthy, self.large, "large", incomplete=True)
d.addCallback(lambda ign: self.small.check(Monitor(), verify=True))
d.addCallback(self.failUnlessEqual, None, "small")
d.addCallback(lambda ign: self.small2.check(Monitor(), verify=True))
d = cr.get_data()
self.failIf(cr.is_healthy(), where)
self.failIf(cr.is_recoverable(), where)
- self.failUnless(d["count-shares-good"] < d["count-shares-needed"],
- where)
+ self.failUnless(d["count-shares-good"] < d["count-shares-needed"], (d["count-shares-good"], d["count-shares-needed"], where))
self.failUnlessEqual(d["count-recoverable-versions"], 0, where)
self.failUnlessEqual(d["count-unrecoverable-versions"], 1, where)
return cr
#self.failUnlessEqual(c["count-objects-unhealthy"], 6)
self.failUnlessEqual(c["count-objects-healthy"], 5) # todo
self.failUnlessEqual(c["count-objects-unhealthy"], 4)
- self.failUnlessEqual(c["count-objects-unrecoverable"], 2)
+ self.failUnlessEqual(c["count-objects-unrecoverable"], 2, str(c))
d.addCallback(_check2)
return d