Opened at 2012-05-23T04:14:47Z
Last modified at 2012-06-16T18:20:42Z
#1749 closed defect
bug in mutable publish that could cause an IndexError when a writer is removed in Publish._connection_problem — at Version 1
| Reported by: | davidsarah | Owned by: | zooko |
|---|---|---|---|
| Priority: | critical | Milestone: | 1.9.2 |
| Component: | code-mutable | Version: | 1.9.1 |
| Keywords: | publish regression test-needed review-needed | Cc: | |
| Launchpad Bug: |
Description (last modified by davidsarah)
"Traceback (most recent call last): Failure: allmydata.mutable.common.NotEnoughServersError: (\"Publish ran out of good servers, last failure was: [Failure instance: Traceback: <type 'exceptions.IndexError'>: list index out of range /home/davidsarah/cloud-branch/support/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg/twisted/internet/base.py:800:runUntilCurrent /home/davidsarah/cloud-branch/support/lib/python2.6/site-packages/foolscap-0.6.3-py2.6.egg/foolscap/eventual.py:26:_turn /home/davidsarah/cloud-branch/support/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg/twisted/internet/defer.py:368:callback /home/davidsarah/cloud-branch/support/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg/twisted/internet/defer.py:464:_startRunCallbacks --- <exception caught here> ---\\n/home/davidsarah/cloud-branch/support/lib/python2.6/site-packages/Twisted-12.0.0-py2.6-linux-i686.egg/twisted/internet/defer.py:551:_runCallbacks /home/davidsarah/cloud-branch/src/allmydata/mutable/publish.py:634:_push /home/davidsarah/cloud-branch/src/allmydata/mutable/publish.py:651:push_segment /home/davidsarah/cloud-branch/src/allmydata/mutable/publish.py:637:_push /home/davidsarah/cloud-branch/src/allmydata/mutable/publish.py:773:push_everything_else /home/davidsarah/cloud-branch/src/allmydata/mutable/publish.py:878:finish_publishing /home/davidsarah/cloud-branch/src/allmydata/mutable/publish.py:886:_record_verinfo
I can reproduce this, at least on the cloud-branch, when I do a tahoe put --mutable shortly after the gateway has started.
Change History (1)
comment:1 Changed at 2012-05-23T04:16:23Z by davidsarah
- Description modified (diff)
- Owner set to zooko
Note: See
TracTickets for help on using
tickets.

zooko suggests this fix, which I reviewed and approved of:
--- old-dw/src/allmydata/mutable/publish.py 2012-05-22 21:48:48.764939441 -0600 +++ new-dw/src/allmydata/mutable/publish.py 2012-05-22 21:48:50.641598788 -0600 @@ -253,6 +253,10 @@ # updating, we ignore damaged and missing shares -- callers must # do a repair to repair and recreate these. self.goal = set(self._servermap.get_known_shares()) + + # k: shnum, v: [ instance of IMutableSlotWriter ] + # The value is required to always be non-empty if the item is present + # in the dict at all. self.writers = {} # SDMF files are updated differently. @@ -891,8 +895,10 @@ """ self.log("found problem: %s" % str(f)) self._last_failure = f - self.writers[writer.shnum].remove(writer) - + writers = self.writers[writer.shnum] + writers.remove(writer) + if len(writers) == 0: + del self.writers[writer.shnum] def log_goal(self, goal, message=""): logmsg = [message]