add RemoteInterfaces (foolscap schemas). some tests break.

This commit is contained in:
Brian Warner 2006-12-01 19:17:50 -07:00
parent 18d8911c51
commit e9d67ecc49
6 changed files with 60 additions and 0 deletions

View File

@ -4,6 +4,8 @@ from foolscap import Referenceable
from twisted.application import service
from twisted.python.failure import Failure
from allmydata.util import idlib
from zope.interface import implements
from allmydata.interfaces import RIBucketWriter
from amdlib.util.assertutil import precondition
@ -44,6 +46,8 @@ class BucketStore(service.MultiService, Referenceable):
return NoSuchBucketError()
class Lease(Referenceable):
implements(RIBucketWriter)
def __init__(self, verifierid, leaser, bucket):
self._leaser = leaser
self._verifierid = verifierid

View File

@ -5,6 +5,8 @@ from foolscap import Tub, Referenceable
from twisted.application import service
from twisted.python import log
from allmydata.util.iputil import get_local_ip_for
from zope.interface import implements
from allmydata.interfaces import RIClient
from twisted.internet import defer, reactor
# this BlockingResolver is because otherwise unit tests must sometimes deal
@ -16,6 +18,7 @@ reactor.installResolver(BlockingResolver())
from allmydata.storageserver import StorageServer
class Client(service.MultiService, Referenceable):
implements(RIClient)
CERTFILE = "client.pem"
STOREDIR = 'storage'

41
allmydata/interfaces.py Normal file
View File

@ -0,0 +1,41 @@
from foolscap.schema import StringConstraint, ListOf, TupleOf, Any, Nothing
from foolscap import RemoteInterface
Nodeid = StringConstraint(20)
PBURL = StringConstraint()
# these three are here because Foolscap does not yet support the kind of
# restriction I really want to apply to these.
RIClient_ = Any
Referenceable_ = Any
RIBucketWriter_ = Any
class RIQueenRoster(RemoteInterface):
def hello(nodeid=Nodeid, node=RIClient_, pburl=PBURL):
return Nothing
class RIClient(RemoteInterface):
def get_service(name=str):
return Referenceable_
def add_peers(new_peers=ListOf(TupleOf(Nodeid, PBURL), maxLength=100)):
return Nothing
def lost_peers(lost_peers=ListOf(Nodeid)):
return Nothing
class RIStorageServer(RemoteInterface):
def allocate_bucket(verifierid=Nodeid, bucket_num=int, size=int,
leaser=Nodeid):
return RIBucketWriter_
class RIBucketWriter(RemoteInterface):
def write(data=str):
return Nothing
def set_size(size=int):
return Nothing
def close():
return Nothing

View File

@ -5,8 +5,12 @@ from twisted.application import service
from twisted.python import log
import os.path
from allmydata.util.iputil import get_local_ip_for
from zope.interface import implements
from allmydata.interfaces import RIQueenRoster
class Roster(service.MultiService, Referenceable):
implements(RIQueenRoster)
def __init__(self):
service.MultiService.__init__(self)
self.phonebook = {}

View File

@ -7,11 +7,14 @@ from twisted.python.failure import Failure
from amdlib.util.assertutil import precondition
from allmydata.bucketstore import BucketStore
from zope.interface import implements
from allmydata.interfaces import RIStorageServer
class BucketAlreadyExistsError(Exception):
pass
class StorageServer(service.MultiService, Referenceable):
implements(RIStorageServer)
name = 'storageserver'
def __init__(self, store_dir):

View File

@ -33,5 +33,10 @@ back pocket ideas:
looks for differences between their self-reported availability and the
experiences of others
store filetable URI in the first 10 peers that appear after your own nodeid
each entry has a sequence number, maybe a timestamp
on recovery, find the newest
big questions:
convergence?
peer list maintenance: lots of entries