[tahoe-lafs-trac-stream] [Tahoe-LAFS] #3985: Support "storage plugins" in the Great Black Swamp storage server and client

Tahoe-LAFS trac at tahoe-lafs.org
Mon Mar 13 13:52:21 UTC 2023


#3985: Support "storage plugins" in the Great Black Swamp storage server and
client
-------------------------+-----------------------
     Reporter:  exarkun  |      Owner:
         Type:  defect   |     Status:  new
     Priority:  normal   |  Milestone:  undecided
    Component:  unknown  |    Version:  n/a
   Resolution:           |   Keywords:
Launchpad Bug:           |
-------------------------+-----------------------

Comment (by exarkun):

 An obvious approach is to transliterate the existing plugin interface to
 Great Black Swamp and allow third-parties to implement a new plugin for
 the new interface.  The plugins should have comparable functionality
 because Great Black Swamp doesn't change much about the _semantics_ of the
 storage protocol, just the network layer.

 A entirely different approach is to leverage the _network layer_ *as* the
 plugin interface and have third-parties provide this functionality out-of-
 process instead of as loadable Python modules to execute in-process.

 Whereas the former process (for clients) looks something like:

 * Load server configuration
 * Load plugin code
 * Match each server to either the built-in storage client or one of the
 loaded plugins
 * Use the resulting object to make storage API calls on the server

 The process for the latter idea (for clients) would look something like:

 * Load server configuration
 * Match each server using the built-in storage client
 * Use the resulting object to make storage API calls to the server

 *plus* a separate third-party workflow that looks something like:

 * Provision a NURL for a locally-running Great Black Swamp "plugin"
 process
 * Give the storage client node server configuration pointing at this
   (To give the client node N storage servers, provision N NURLs for the
 "plugin" process)
 * Implement plugin-specific logic in the "plugin" process
   (Probably making desired changes and then proxying most operations
 onwards to some set of real servers)

 Advantages of this out-of-process approach:

 * Leave the existing Tahoe-LAFS Python code alone.
   * There is substantial complexity in the current plugin implementation
 to deal with the quirks of the way a Tahoe-LAFS client node is
 representation.
     This could all be avoided.
 * Plugins can be implemented in any language.
   * This might save the work of having to implement each plugin more than
 once.
     The only known implementation already wants to support a Haskell
 client.

 Disadvantages:

 * An extra process to manage.
 * Integration with dynamic server discovery (ie, introducers) involves
 some more work.
   * The introducer protocol is still Foolscap (though we already knew we
 wanted to change that)

--
Ticket URL: <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3985#comment:1>
Tahoe-LAFS <https://Tahoe-LAFS.org>
secure decentralized storage


More information about the tahoe-lafs-trac-stream mailing list