Changeset d1d9884 in trunk


Ignore:
Timestamp:
2016-05-04T23:53:04Z (9 years ago)
Author:
Brian Warner <warner@…>
Branches:
master
Children:
93bb3e9, f57d1e9
Parents:
c715e0d
git-author:
Brian Warner <warner@…> (2016-04-28 07:05:30)
git-committer:
Brian Warner <warner@…> (2016-05-04 23:53:04)
Message:

remove "key-generator" node type and client support

closes ticket:2783

Files:
1 added
3 deleted
13 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified docs/configuration.rst

    rc715e0d rd1d9884  
    7070==========
    7171
    72 A node can be a client/server, an introducer, a statistics gatherer, or a
    73 key generator.
     72A node can be a client/server, an introducer, or a statistics gatherer.
    7473
    7574Client/server nodes provide one or more of the following services:
     
    336335    for uploads. See :doc:`helper` for details.
    337336
    338 ``key_generator.furl = (FURL string, optional)``
    339 
    340     If provided, the node will attempt to connect to and use the given
    341     key-generator service, using RSA keys from the external process rather
    342     than generating its own.
    343 
    344337``stats_gatherer.furl = (FURL string, optional)``
    345338
     
    612605  This file is used to construct an introducer, and is created by the
    613606  "``tahoe create-introducer``" command.
    614 
    615 ``tahoe-key-generator.tac``
    616 
    617   This file is used to construct a key generator, and is created by the
    618   "``tahoe create-key-gernerator``" command.
    619607
    620608``tahoe-stats-gatherer.tac``
  • TabularUnified docs/frontends/CLI.rst

    rc715e0d rd1d9884  
    105105node will produce a ``private/introducer.furl`` file, which should be
    106106published to all clients.
    107 
    108 "``tahoe create-key-generator [NODEDIR]``" is used to create a special
    109 "key-generation" service, which allows a client to offload their RSA key
    110 generation to a separate process. Since RSA key generation takes several
    111 seconds, and must be done each time a directory is created, moving it to a
    112 separate process allows the first process (perhaps a busy web-API server) to
    113 continue servicing other requests. The key generator exports a FURL that can
    114 be copied into a node to enable this functionality.
    115107
    116108"``tahoe run [NODEDIR]``" will start a previously-created node in the foreground.
  • TabularUnified docs/man/man1/tahoe.1

    rc715e0d rd1d9884  
    4646.B \f[B]create-introducer\f[]
    4747Create an introducer node.
    48 .TP
    49 .B \f[B]create-key-generator\f[]
    50 Create a key generator service.
    5148.TP
    5249.B \f[B]create-stats-gatherer\f[]
  • TabularUnified src/allmydata/client.py

    rc715e0d rd1d9884  
    5959    with a built-in default of 2048 bits."""
    6060    def __init__(self):
    61         self._remote = None
    6261        self.default_keysize = 2048
    6362
    64     def set_remote_generator(self, keygen):
    65         self._remote = keygen
    6663    def set_default_keysize(self, keysize):
    6764        """Call this to override the size of the RSA keys created for new
     
    8178        keys."""
    8279        keysize = keysize or self.default_keysize
    83         if self._remote:
    84             d = self._remote.callRemote('get_rsa_key_pair', keysize)
    85             def make_key_objs((verifying_key, signing_key)):
    86                 v = rsa.create_verifying_key_from_string(verifying_key)
    87                 s = rsa.create_signing_key_from_string(signing_key)
    88                 return v, s
    89             d.addCallback(make_key_objs)
    90             return d
    91         else:
    92             # RSA key generation for a 2048 bit key takes between 0.8 and 3.2
    93             # secs
    94             signer = rsa.generate(keysize)
    95             verifier = signer.get_verifying_key()
    96             return defer.succeed( (verifier, signer) )
     80        # RSA key generation for a 2048 bit key takes between 0.8 and 3.2
     81        # secs
     82        signer = rsa.generate(keysize)
     83        verifier = signer.get_verifying_key()
     84        return defer.succeed( (verifier, signer) )
    9785
    9886class Terminator(service.Service):
     
    146134        key_gen_furl = self.get_config("client", "key_generator.furl", None)
    147135        if key_gen_furl:
    148             self.init_key_gen(key_gen_furl)
     136            log.msg("[client]key_generator.furl= is now ignored, see #2783")
    149137        self.init_client()
    150138        self.helper = None
     
    443431        self.tub.registerReference(self.helper, furlFile=helper_furlfile)
    444432
    445     def init_key_gen(self, key_gen_furl):
    446         self.tub.connectTo(key_gen_furl, self._got_key_generator)
    447 
    448     def _got_key_generator(self, key_generator):
    449         self._key_generator.set_remote_generator(key_generator)
    450         key_generator.notifyOnDisconnect(self._lost_key_generator)
    451 
    452     def _lost_key_generator(self):
    453         self._key_generator.set_remote_generator(None)
    454 
    455433    def set_default_mutable_keysize(self, keysize):
    456434        self._key_generator.set_default_keysize(keysize)
  • TabularUnified src/allmydata/interfaces.py

    rc715e0d rd1d9884  
    28092809        """
    28102810
    2811 class RIKeyGenerator(RemoteInterface):
    2812     __remote_name__ = "RIKeyGenerator.tahoe.allmydata.com"
    2813     """
    2814     Provides a service offering to make RSA key pairs.
    2815     """
    2816 
    2817     def get_rsa_key_pair(key_size=int):
    2818         """
    2819         @param key_size: the size of the signature key.
    2820         @return: tuple(verifying_key, signing_key)
    2821         """
    2822         return TupleOf(str, str)
    2823 
    2824 
    28252811class FileTooLargeError(Exception):
    28262812    pass
  • TabularUnified src/allmydata/scripts/create_node.py

    rc715e0d rd1d9884  
    110110    c.write("introducer.furl = %s\n" % config.get("introducer", ""))
    111111    c.write("helper.furl =\n")
    112     c.write("#key_generator.furl =\n")
    113112    c.write("#stats_gatherer.furl =\n")
    114113    c.write("\n")
  • TabularUnified src/allmydata/scripts/runner.py

    rc715e0d rd1d9884  
    66
    77from allmydata.scripts.common import get_default_nodedir
    8 from allmydata.scripts import debug, create_node, startstop_node, cli, keygen, stats_gatherer, admin
     8from allmydata.scripts import debug, create_node, startstop_node, cli, stats_gatherer, admin
    99from allmydata.util.encodingutil import quote_output, quote_local_unicode_path, get_io_encoding
    1010
     
    3737    subCommands = ( GROUP("Administration")
    3838                    +   create_node.subCommands
    39                     +   keygen.subCommands
    4039                    +   stats_gatherer.subCommands
    4140                    +   admin.subCommands
     
    8685
    8786create_dispatch = {}
    88 for module in (create_node, keygen, stats_gatherer):
     87for module in (create_node, stats_gatherer):
    8988    create_dispatch.update(module.dispatch)
    9089
  • TabularUnified src/allmydata/scripts/startstop_node.py

    rc715e0d rd1d9884  
    8181            return IntroducerNode(self.basedir)
    8282        if self.nodetype == "key-generator":
    83             from allmydata.key_generator import KeyGeneratorService
    84             return KeyGeneratorService(default_key_size=2048)
     83            raise ValueError("key-generator support removed, see #2783")
    8584        if self.nodetype == "stats-gatherer":
    8685            from allmydata.stats import StatsGathererService
  • TabularUnified src/allmydata/test/common.py

    rc715e0d rd1d9884  
    2323from allmydata.util.consumer import download_to_data
    2424from allmydata.stats import StatsGathererService
    25 from allmydata.key_generator import KeyGeneratorService
    2625import allmydata.test.common_util as testutil
    2726from allmydata import immutable
     
    449448        self.stats_gatherer = None
    450449        self.stats_gatherer_furl = None
    451         self.key_generator_svc = None
    452         self.key_generator_furl = None
    453450
    454451    def tearDown(self):
     
    465462        return s
    466463
    467     def set_up_nodes(self, NUMCLIENTS=5,
    468                      use_stats_gatherer=False, use_key_generator=False):
     464    def set_up_nodes(self, NUMCLIENTS=5, use_stats_gatherer=False):
    469465        self.numclients = NUMCLIENTS
    470466        iv_dir = self.getdir("introducer")
     
    486482        if use_stats_gatherer:
    487483            d.addCallback(self._set_up_stats_gatherer)
    488         if use_key_generator:
    489             d.addCallback(self._set_up_key_generator)
    490484        d.addCallback(self._set_up_nodes_2)
    491485        if use_stats_gatherer:
     
    512506        def get_furl(junk):
    513507            self.stats_gatherer_furl = file(sgf, 'rb').read().strip()
    514         d.addCallback(get_furl)
    515         return d
    516 
    517     def _set_up_key_generator(self, res):
    518         kgsdir = self.getdir("key_generator")
    519         fileutil.make_dirs(kgsdir)
    520 
    521         self.key_generator_svc = KeyGeneratorService(kgsdir,
    522                                                      display_furl=False,
    523                                                      default_key_size=TEST_RSA_KEY_SIZE)
    524         self.key_generator_svc.key_generator.pool_size = 4
    525         self.key_generator_svc.key_generator.pool_refresh_delay = 60
    526         self.add_service(self.key_generator_svc)
    527 
    528         d = fireEventually()
    529         def check_for_furl():
    530             return os.path.exists(os.path.join(kgsdir, 'key_generator.furl'))
    531         d.addCallback(lambda junk: self.poll(check_for_furl, timeout=30))
    532         def get_furl(junk):
    533             kgf = os.path.join(kgsdir, 'key_generator.furl')
    534             self.key_generator_furl = file(kgf, 'rb').read().strip()
    535508        d.addCallback(get_furl)
    536509        return d
     
    564537
    565538            if i == 0:
    566                 # clients[0] runs a webserver and a helper, no key_generator
     539                # clients[0] runs a webserver and a helper
    567540                config += nodeconfig
    568541                config += "web.port = tcp:0:interface=127.0.0.1\n"
     
    571544                config += "enabled = True\n"
    572545            elif i == 3:
    573                 # clients[3] runs a webserver and uses a helper, uses
    574                 # key_generator
    575                 if self.key_generator_furl:
    576                     config += "key_generator.furl = %s\n" % self.key_generator_furl
     546                # clients[3] runs a webserver and uses a helper
    577547                config += nodeconfig
    578548                config += "web.port = tcp:0:interface=127.0.0.1\n"
  • TabularUnified src/allmydata/test/no_network.py

    rc715e0d rd1d9884  
    1111# This should be useful for tests which want to examine and/or manipulate the
    1212# uploaded shares, checker/verifier/repairer tests, etc. The clients have no
    13 # Tubs, so it is not useful for tests that involve a Helper, a KeyGenerator,
    14 # or the control.furl .
     13# Tubs, so it is not useful for tests that involve a Helper or the
     14# control.furl .
    1515
    1616import os
  • TabularUnified src/allmydata/test/test_cli.py

    rc715e0d rd1d9884  
    1818
    1919# Test that the scripts can be imported.
    20 from allmydata.scripts import create_node, debug, keygen, startstop_node, \
     20from allmydata.scripts import create_node, debug, startstop_node, \
    2121    tahoe_add_alias, tahoe_backup, tahoe_check, tahoe_cp, tahoe_get, tahoe_ls, \
    2222    tahoe_manifest, tahoe_mkdir, tahoe_mv, tahoe_put, tahoe_unlink, tahoe_webopen
    23 _hush_pyflakes = [create_node, debug, keygen, startstop_node,
     23_hush_pyflakes = [create_node, debug, startstop_node,
    2424    tahoe_add_alias, tahoe_backup, tahoe_check, tahoe_cp, tahoe_get, tahoe_ls,
    2525    tahoe_manifest, tahoe_mkdir, tahoe_mv, tahoe_put, tahoe_unlink, tahoe_webopen]
  • TabularUnified src/allmydata/test/test_runner.py

    rc715e0d rd1d9884  
    282282        self.do_create("introducer")
    283283
    284     def test_key_generator(self):
    285         self.do_create("key-generator")
    286 
    287284    def test_stats_gatherer(self):
    288285        self.do_create("stats-gatherer")
     
    652649        d.addCallback(_cb3)
    653650        return d
    654 
    655     def test_keygen(self):
    656         self.skip_if_cannot_daemonize()
    657 
    658         basedir = self.workdir("test_keygen")
    659         c1 = os.path.join(basedir, "c1")
    660         twistd_pid_file = os.path.join(c1, "twistd.pid")
    661         keygen_furl_file = os.path.join(c1, "key_generator.furl")
    662 
    663         d = self.run_bintahoe(["--quiet", "create-key-generator", "--basedir", c1])
    664         def _cb(res):
    665             out, err, rc_or_sig = res
    666             self.failUnlessEqual(rc_or_sig, 0)
    667         d.addCallback(_cb)
    668 
    669         def _start(res):
    670             return self.run_bintahoe(["--quiet", "start", c1])
    671         d.addCallback(_start)
    672 
    673         def _cb2(res):
    674             out, err, rc_or_sig = res
    675             errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err)
    676             self.failUnlessEqual(rc_or_sig, 0, errstr)
    677             self.failUnlessEqual(out, "", errstr)
    678             # self.failUnlessEqual(err, "", errstr) # See test_client_no_noise -- for now we ignore noise.
    679 
    680             # the parent (twistd) has exited. However, twistd writes the pid
    681             # from the child, not the parent, so we can't expect twistd.pid
    682             # to exist quite yet.
    683 
    684             # the node is running, but it might not have made it past the
    685             # first reactor turn yet, and if we kill it too early, it won't
    686             # remove the twistd.pid file. So wait until it does something
    687             # that we know it won't do until after the first turn.
    688         d.addCallback(_cb2)
    689 
    690         def _node_has_started():
    691             return os.path.exists(keygen_furl_file)
    692         d.addCallback(lambda res: self.poll(_node_has_started))
    693 
    694         def _started(res):
    695             self.failUnless(os.path.exists(twistd_pid_file))
    696             # rm this so we can detect when the second incarnation is ready
    697             os.unlink(keygen_furl_file)
    698             return self.run_bintahoe(["--quiet", "restart", c1])
    699         d.addCallback(_started)
    700 
    701         def _cb3(res):
    702             out, err, rc_or_sig = res
    703             errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err)
    704             self.failUnlessEqual(rc_or_sig, 0, errstr)
    705             self.failUnlessEqual(out, "", errstr)
    706             # self.failUnlessEqual(err, "", errstr) # See test_client_no_noise -- for now we ignore noise.
    707         d.addCallback(_cb3)
    708 
    709         # again, the second incarnation of the node might not be ready yet,
    710         # so poll until it is
    711         d.addCallback(lambda res: self.poll(_node_has_started))
    712 
    713         # now we can kill it. TODO: On a slow machine, the node might kill
    714         # itself before we get a chance too, especially if spawning the
    715         # 'tahoe stop' command takes a while.
    716         def _stop(res):
    717             self.failUnless(os.path.exists(twistd_pid_file))
    718             return self.run_bintahoe(["--quiet", "stop", c1])
    719         d.addCallback(_stop)
    720 
    721         def _cb4(res):
    722             out, err, rc_or_sig = res
    723             # the parent has exited by now
    724             errstr = "rc=%d, OUT: '%s', ERR: '%s'" % (rc_or_sig, out, err)
    725             self.failUnlessEqual(rc_or_sig, 0, errstr)
    726             self.failUnlessEqual(out, "", errstr)
    727             # self.failUnlessEqual(err, "", errstr) # See test_client_no_noise -- for now we ignore noise.
    728             # the parent was supposed to poll and wait until it sees
    729             # twistd.pid go away before it exits, so twistd.pid should be
    730             # gone by now.
    731             self.failIf(os.path.exists(twistd_pid_file))
    732         d.addCallback(_cb4)
    733         return d
  • TabularUnified src/allmydata/test/test_system.py

    rc715e0d rd1d9884  
    476476        NEWERDATA_uploadable = MutableData(NEWERDATA)
    477477
    478         d = self.set_up_nodes(use_key_generator=True)
     478        d = self.set_up_nodes()
    479479
    480480        def _create_mutable(res):
     
    674674        d.addCallback(_created_dirnode)
    675675
    676         def wait_for_c3_kg_conn():
    677             return self.clients[3]._key_generator is not None
    678         d.addCallback(lambda junk: self.poll(wait_for_c3_kg_conn))
    679 
    680         def check_kg_poolsize(junk, size_delta):
    681             self.failUnlessEqual(len(self.key_generator_svc.key_generator.keypool),
    682                                  self.key_generator_svc.key_generator.pool_size + size_delta)
    683 
    684         d.addCallback(check_kg_poolsize, 0)
    685         d.addCallback(lambda junk:
    686             self.clients[3].create_mutable_file(MutableData('hello, world')))
    687         d.addCallback(check_kg_poolsize, -1)
    688         d.addCallback(lambda junk: self.clients[3].create_dirnode())
    689         d.addCallback(check_kg_poolsize, -2)
    690         # use_helper induces use of clients[3], which is the using-key_gen client
    691         d.addCallback(lambda junk:
    692                       self.POST("uri?t=mkdir&name=george", use_helper=True))
    693         d.addCallback(check_kg_poolsize, -3)
    694 
    695676        return d
    696677
Note: See TracChangeset for help on using the changeset viewer.