mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-31 08:25:35 +00:00
split IDisplayableServer from IServer, add sb.get_stub_server()
IDisplayableServer includes just enough functionality to call .get_name() and friends, which is all that the UploadResults really need. IServer is a superset that includes actual share-manipulation methods. StubServer instances provide only IDisplayableServer, while actual NativeStorageServer instances provide the full IServer interface. When the Helper sends a serverid (so we know what to call the server but nothing else about it, and have no corresponding NativeStorageServer object to reference), but we want to store an IDisplayableServer in the UploadResults, we create a synthetic StubServer "server" and store that instead.
This commit is contained in:
parent
3d771132a8
commit
97a1eb6ebf
@ -420,12 +420,18 @@ class IStorageBroker(Interface):
|
||||
repeatable way, to distribute load over many peers.
|
||||
"""
|
||||
|
||||
class IServer(Interface):
|
||||
class IDisplayableServer(Interface):
|
||||
def get_nickname():
|
||||
pass
|
||||
def get_name():
|
||||
pass
|
||||
def get_longname():
|
||||
pass
|
||||
|
||||
class IServer(IDisplayableServer):
|
||||
"""I live in the client, and represent a single server."""
|
||||
def start_connecting(tub, trigger_cb):
|
||||
pass
|
||||
def get_nickname():
|
||||
pass
|
||||
def get_rref():
|
||||
pass
|
||||
|
||||
|
@ -32,7 +32,7 @@ the foolscap-based server implemented in src/allmydata/storage/*.py .
|
||||
import re, time
|
||||
from zope.interface import implements
|
||||
from foolscap.api import eventually
|
||||
from allmydata.interfaces import IStorageBroker, IServer
|
||||
from allmydata.interfaces import IStorageBroker, IDisplayableServer, IServer
|
||||
from allmydata.util import log, base32
|
||||
from allmydata.util.assertutil import precondition
|
||||
from allmydata.util.rrefutil import add_version_to_remote_reference
|
||||
@ -139,6 +139,24 @@ class StorageFarmBroker:
|
||||
return self.servers[serverid].get_nickname()
|
||||
return None
|
||||
|
||||
def get_stub_server(self, serverid):
|
||||
if serverid in self.servers:
|
||||
return self.servers[serverid]
|
||||
return StubServer(serverid)
|
||||
|
||||
class StubServer:
|
||||
implements(IDisplayableServer)
|
||||
def __init__(self, serverid):
|
||||
self.serverid = serverid # binary tubid
|
||||
def get_serverid(self):
|
||||
return self.serverid
|
||||
def get_name(self):
|
||||
return base32.b2a(self.serverid)[:8]
|
||||
def get_longname(self):
|
||||
return base32.b2a(self.serverid)
|
||||
def get_nickname(self):
|
||||
return "?"
|
||||
|
||||
class NativeStorageServer:
|
||||
"""I hold information about a storage server that we want to connect to.
|
||||
If we are connected, I hold the RemoteReference, their host address, and
|
||||
|
Loading…
x
Reference in New Issue
Block a user