From 247bfe8d58095a54d5869d49ed4671d6f2ed091c Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@allmydata.com>
Date: Wed, 7 Nov 2007 17:52:09 -0700
Subject: [PATCH] mutable: fix usage of NeedMoreDataError

---
 src/allmydata/mutable.py       |  4 +++-
 src/allmydata/scripts/debug.py | 11 ++++++++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/allmydata/mutable.py b/src/allmydata/mutable.py
index aa44dcc6..d97e76fd 100644
--- a/src/allmydata/mutable.py
+++ b/src/allmydata/mutable.py
@@ -18,6 +18,8 @@ class NeedMoreDataError(Exception):
     def __init__(self, needed_bytes):
         Exception.__init__(self)
         self.needed_bytes = needed_bytes
+    def __str__(self):
+        return "<NeedMoreDataError (%d bytes)>" % self.needed_bytes
 
 class UncoordinatedWriteError(Exception):
     pass
@@ -372,7 +374,7 @@ class Retrieve:
             return
         if f.check(NeedMoreDataError):
             # ah, just re-send the query then.
-            self._read_size = max(self._read_size, f.needed_bytes)
+            self._read_size = max(self._read_size, f.value.needed_bytes)
             (conn, storage_index, peer_storage_servers) = stuff
             self._do_query(conn, peerid, storage_index, self._read_size,
                            peer_storage_servers)
diff --git a/src/allmydata/scripts/debug.py b/src/allmydata/scripts/debug.py
index 936e84a6..5ec8e11c 100644
--- a/src/allmydata/scripts/debug.py
+++ b/src/allmydata/scripts/debug.py
@@ -181,7 +181,16 @@ def dump_SDMF_share(offset, length, config, out, err):
     data = f.read(min(length, 2000))
     f.close()
 
-    pieces = mutable.unpack_share(data)
+    try:
+        pieces = mutable.unpack_share(data)
+    except mutable.NeedMoreDataError, e:
+        # retry once with the larger size
+        size = e.needed_bytes
+        f = open(config['filename'], "rb")
+        f.seek(offset)
+        data = f.read(min(length, size))
+        f.close()
+        pieces = mutable.unpack_share(data)
 
     (seqnum, root_hash, IV, k, N, segsize, datalen,
      pubkey, signature, share_hash_chain, block_hash_tree,
-- 
2.45.2