devchat notes 05-Sep-2017

Brian Warner warner at lothar.com
Tue Sep 19 05:39:11 UTC 2017


Tahoe-LAFS devchat 05-Sep-2017

Attendees: warner, exarkun, meejah, cypher, dawuud, bookchin, str4d

Topics:
* exarkun's profiling efforts on the storage server: still trying to get
  it working
* warner's old atlasperf and tahoeperf
* moving away from foolscap, all the same blockers as before
* porting everything to python3
  * cpython 2.7 EOL is 2020
  * pypy plans to support py2 for longer
  * do we run on pypy? zfec/pycryptopp binary deps?
  * switch from pycryptopp to Cryptography
    * maybe add stuff to Cryptography
    * Cryptography is better maintained by far, but uses OpenSSL as the
      backend which we aren't fond of
    * maybe contract for a better Cryptography backend
  * port zfec to py3? or replace with pure-python? or rust-binding?
    * pypy may make the slowdown better
  * probably need to port foolscap to py3 even though we hope to move to
    HTTP
* changing to rainhill: could we drop support for the old encoding
  scheme?
  * str4d suggests to use the share-maintenance (renewal) tools to
    migrate shares to the new format
  * also replace the rootcap with a new-format mutable directory
  * or a "cp -r --upgrade-format" command
  * need a readcap to upgrade the files, since the encoding is so very
    different
    * if it were more similar, a verifycap might suffice, and we could
      delegate the conversion process to someone
    * we'd have to stick with the same encryption key, so sticking with
      AES, and giving up on 100-year-crypto
* switching from foolscap to http could be done incrementally
  * all nodes must enter the "foolscap+http box" before any are allowed
    to leave it (upgrade to http-only)
* switching config from (tahoe.cfg, yaml files) to single sqlite DB
  * warner picked this up from glyph years ago
  * would need user tools to modify config ("tahoe config set")
    * or web-based configurator
  * exarkun points out: user-vs-node modify conflicts still require
    management, doesn't come free
  * storj approach (notes from bookchin):
    * electron app, could modify the config file form within the GUI app
    * used a flat JSON file, worried about coherence, crashes during
      write, trailing commas
    * in new project ("orc"?) can use web login interface to stop child
      nodes, update config, restart nodes
    * bookchin isn't sure he likes it yet
    * less-technical users were more reluctant to manage a config file,
      was better to modify through the GUI
  * exarkun prefers command-line arguments (argv)
  * str4d said i2p had the opposite problem: the web UI is the primary
    config mechanism, config is saved as serialized java properties(?)
    * editing the config file is hard, doesn't retain comments
    * hard to discover the existence of config settings
  * might be one-or-the-other
    * 1: text-based human-editable never-machine-modified config file
    * 2: binary non-human-editable always-machine-modified config file
      (sqlite, provide config-editing tools)
  * backing up the config file, store it in version-control,
    machine-generated config for fleet deployments
  * meejah really likes ephemeral config: no state on disk
    * tor, bitcoin, zcash do this
  * if tahoe client was a library (no server, no magic-folder), this
    would be easier
    * meejah: could use 'tahoe' python package namespace to greenfield
      this API
    * the client() constructor could take the basic args
      * c = client(introducer_furl)
      * c.put(data, encoding_parameters=) -> filecap
      * c.get(filecap) -> data
    * or without a constructor: tahoe.client.put(introducer_furl, data,
      encoding_parameters)
      * but that makes it harder to cache data or connections
    * if it needs any persistence, pass *in* objects to provide that
      * twisted.conch does this: privkey is maintained in an object that
        is passed into the API
      * txtorcon too: pass in a function that can be called to get a
        password (via Deferred)
        * callers can provide a static password, or ask the user
    * applications could decide whether the persistence is important or
      not, pass in objects to provide it
      * cached server records
      * keepalive-d server connections
    * "tahoe backup" is an application that manages its own persistent
      state (backupdb)
    * related client and server instances (reciprocity accounting)
      * add an Accounting object that is passed into the constructor?
    * where should the webstatus/progress info go?
      * could pass a web-UI monitoring object into the API
      * normal filecap=c.put(data) probably wants progress data too
      * status of specific operation
      * status of all operations, all client connections
* could split tahoe into Client and Server objects (interfaces)
  * also split allmydata.web.* into client pieces and server pieces
  * client daemon gets rewritten in terms of a non-daemonic client
    libtahoe API
  * applications can embed the client libtahoe API
* meejah would like to see server split up too: make a function that
  accepts objects for config/state/accounting-db, build server daemon
  out of that
* pass reactor, treq.Agent, everything powerful *into* the client
  constructor/factory function?


More information about the tahoe-dev mailing list