mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-06-19 15:53:48 +00:00
client: publish a 'stub client' announcement to the introducer, to provide version/nickname information for each client
This commit is contained in:
@ -3,8 +3,10 @@ import os, stat, time, re
|
|||||||
from allmydata.interfaces import RIStorageServer
|
from allmydata.interfaces import RIStorageServer
|
||||||
from allmydata import node
|
from allmydata import node
|
||||||
|
|
||||||
|
from zope.interface import implements
|
||||||
from twisted.internet import reactor
|
from twisted.internet import reactor
|
||||||
from twisted.application.internet import TimerService
|
from twisted.application.internet import TimerService
|
||||||
|
from foolscap import Referenceable
|
||||||
from foolscap.logging import log
|
from foolscap.logging import log
|
||||||
|
|
||||||
import allmydata
|
import allmydata
|
||||||
@ -21,7 +23,7 @@ from allmydata.dirnode import NewDirectoryNode
|
|||||||
from allmydata.mutable import MutableFileNode, MutableWatcher
|
from allmydata.mutable import MutableFileNode, MutableWatcher
|
||||||
from allmydata.stats import StatsProvider
|
from allmydata.stats import StatsProvider
|
||||||
from allmydata.interfaces import IURI, INewDirectoryURI, \
|
from allmydata.interfaces import IURI, INewDirectoryURI, \
|
||||||
IReadonlyNewDirectoryURI, IFileURI, IMutableFileURI
|
IReadonlyNewDirectoryURI, IFileURI, IMutableFileURI, RIStubClient
|
||||||
|
|
||||||
KiB=1024
|
KiB=1024
|
||||||
MiB=1024*KiB
|
MiB=1024*KiB
|
||||||
@ -29,6 +31,9 @@ GiB=1024*MiB
|
|||||||
TiB=1024*GiB
|
TiB=1024*GiB
|
||||||
PiB=1024*TiB
|
PiB=1024*TiB
|
||||||
|
|
||||||
|
class StubClient(Referenceable):
|
||||||
|
implements(RIStubClient)
|
||||||
|
|
||||||
class Client(node.Node, testutil.PollMixin):
|
class Client(node.Node, testutil.PollMixin):
|
||||||
PORTNUMFILE = "client.port"
|
PORTNUMFILE = "client.port"
|
||||||
STOREDIR = 'storage'
|
STOREDIR = 'storage'
|
||||||
@ -63,11 +68,7 @@ class Client(node.Node, testutil.PollMixin):
|
|||||||
run_helper = self.get_config("run_helper")
|
run_helper = self.get_config("run_helper")
|
||||||
if run_helper:
|
if run_helper:
|
||||||
self.init_helper()
|
self.init_helper()
|
||||||
helper_furl = self.get_config("helper.furl")
|
self.init_client()
|
||||||
self.add_service(Uploader(helper_furl))
|
|
||||||
self.add_service(Downloader())
|
|
||||||
self.add_service(Checker())
|
|
||||||
self.add_service(MutableWatcher())
|
|
||||||
# ControlServer and Helper are attached after Tub startup
|
# ControlServer and Helper are attached after Tub startup
|
||||||
|
|
||||||
hotline_file = os.path.join(self.basedir,
|
hotline_file = os.path.join(self.basedir,
|
||||||
@ -148,6 +149,24 @@ class Client(node.Node, testutil.PollMixin):
|
|||||||
d.addCallback(_publish)
|
d.addCallback(_publish)
|
||||||
d.addErrback(log.err, facility="tahoe.init", level=log.BAD)
|
d.addErrback(log.err, facility="tahoe.init", level=log.BAD)
|
||||||
|
|
||||||
|
def init_client(self):
|
||||||
|
helper_furl = self.get_config("helper.furl")
|
||||||
|
self.add_service(Uploader(helper_furl))
|
||||||
|
self.add_service(Downloader())
|
||||||
|
self.add_service(Checker())
|
||||||
|
self.add_service(MutableWatcher())
|
||||||
|
def _publish(res):
|
||||||
|
# we publish an empty object so that the introducer can count how
|
||||||
|
# many clients are connected and see what versions they're
|
||||||
|
# running.
|
||||||
|
sc = StubClient()
|
||||||
|
furl = self.tub.registerReference(sc)
|
||||||
|
ri_name = RIStubClient.__remote_name__
|
||||||
|
self.introducer_client.publish(furl, "stub_client", ri_name)
|
||||||
|
d = self.when_tub_ready()
|
||||||
|
d.addCallback(_publish)
|
||||||
|
d.addErrback(log.err, facility="tahoe.init", level=log.BAD)
|
||||||
|
|
||||||
def init_control(self):
|
def init_control(self):
|
||||||
d = self.when_tub_ready()
|
d = self.when_tub_ready()
|
||||||
def _publish(res):
|
def _publish(res):
|
||||||
|
@ -160,6 +160,13 @@ class IIntroducerClient(Interface):
|
|||||||
"""Returns a boolean, True if we are currently connected to the
|
"""Returns a boolean, True if we are currently connected to the
|
||||||
introducer, False if not."""
|
introducer, False if not."""
|
||||||
|
|
||||||
|
class RIStubClient(RemoteInterface):
|
||||||
|
"""Each client publishes a service announcement for a dummy object called
|
||||||
|
the StubClient. This object doesn't actually offer any services, but the
|
||||||
|
announcement helps the Introducer keep track of which clients are
|
||||||
|
subscribed (so the grid admin can keep track of things like the size of
|
||||||
|
the grid and the client versions in use. This is the (empty)
|
||||||
|
RemoteInterface for the StubClient."""
|
||||||
|
|
||||||
class RIBucketWriter(RemoteInterface):
|
class RIBucketWriter(RemoteInterface):
|
||||||
def write(offset=Offset, data=ShareData):
|
def write(offset=Offset, data=ShareData):
|
||||||
|
Reference in New Issue
Block a user