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]