change bucket writer protocol, give Encoder a RemoteReference instead of a file-like object

This commit is contained in:
Brian Warner 2006-12-01 19:17:26 -07:00
parent 09aedcac7b
commit 18d8911c51
2 changed files with 29 additions and 30 deletions

View File

@ -1,9 +1,36 @@
from twisted.trial import unittest
from twisted.internet import defer
from cStringIO import StringIO
from allmydata import upload
class StringBucketProxy:
# This is for unit tests: make a StringIO look like a RIBucketWriter.
def __init__(self):
self.data = StringIO()
self.size = None
self.done = False
def callRemote(self, methname, **kwargs):
if methname == "write":
return defer.maybeDeferred(self.write, **kwargs)
elif methname == "set_size":
return defer.maybeDeferred(self.set_size, **kwargs)
elif methname == "close":
return defer.maybeDeferred(self.close, **kwargs)
else:
return defer.fail(NameError("no such method named %s" % methname))
def write(self, data):
self.data.write(data)
def set_size(self, size):
self.size = size
def close(self):
self.done = True
class FakePeer:
def __init__(self, peerid, response):
self.peerid = peerid
@ -55,9 +82,7 @@ class NextPeer(unittest.TestCase):
def compare_landlords(self, u, c, expected):
exp = [(peerid, bucketnum, c.peers[peerid])
for peerid, bucketnum in expected]
landlords = [(peerid, bucketnum, proxy.remote_bucket)
for peerid, bucketnum, proxy in u.landlords]
self.failUnlessEqual(landlords, exp)
self.failUnlessEqual(u.landlords, exp)
def test_0(self):
c = FakeClient([])

View File

@ -13,31 +13,6 @@ class HaveAllPeersError(Exception):
class TooFullError(Exception):
pass
class WriterProxy:
# make this look like a writable file
def __init__(self, remote_bucket):
self.remote_bucket = remote_bucket
self.good = True
def _broken(self, why):
self.good = False
# do something else here
return why
def write(self, data):
d = self.remote_bucket.callRemote("write", data=data)
d.addErrback(self._broken)
def seek(self, offset, whence=0):
d = self.remote_bucket.callRemote("seek", offset=offset, whence=whence)
d.addErrback(self._broken)
def close(self):
if self._broken:
raise SomethingBrokeError()
d = self.remote_bucket.callRemote("close")
d.addErrback(self._broken)
class Uploader:
debug = False
@ -98,8 +73,7 @@ class Uploader:
def _allocate_response(bucket):
if self.debug:
print " peerid %s will grant us a lease" % peerid
writer = WriterProxy(bucket)
self.landlords.append( (peerid, bucket_num, writer) )
self.landlords.append( (peerid, bucket_num, bucket) )
self.goodness_points += 1
if self.goodness_points >= self.target_goodness:
if self.debug: print " we're done!"