[tahoe-lafs-trac-stream] [Tahoe-LAFS] #3931: Factor functionality related to running a storage service into a separate class from `_Client`
Tahoe-LAFS
trac at tahoe-lafs.org
Mon Oct 3 13:54:27 UTC 2022
#3931: Factor functionality related to running a storage service into a separate
class from `_Client`
-----------------------------+-----------------------
Reporter: exarkun | Owner:
Type: enhancement | Status: new
Priority: normal | Milestone: undecided
Component: unknown | Version: n/a
Resolution: | Keywords:
Launchpad Bug: |
-----------------------------+-----------------------
Description changed by exarkun:
Old description:
> `allmydata.client._Client` combines many concerns. At least:
>
> * metrics collection
> * secrets management
> * webui frontend initialization
> * storage services
> * storage client services
> * blacklist management
> * file "node" creation
> * helper management
> * sftp frontend initialization
>
> This is just the list that's obvious from reading the names of its
> methods.
>
> Most of the logic for most of these things is already implement by
> something other than `_Client`. However, `_Client` ties them all
> together in an obligatory "super object". Much of the functionality can
> be disabled - but only through the very awkward interface of the bytes in
> a `tahoe.cfg` file.
>
> Instead of making `tahoe.cfg` the only control structure for what
> `_Client` does and does not do, we should arrange to have a convenient
> Python API that allows for composition of functionality. For starters,
> this could exactly mirror the capabilities of `tahoe.cfg` (and should, in
> fact, be the API that the contents of `tahoe.cfg` drives). The point
> would be to make it easier to make these choices from Python code -
> without a trip through an ini-style configuration file.
>
> We could start by pulling any one of these pieces out but the storage
> service piece is particularly interesting as it is undergoing a non-
> trivial amount of maintenance these days so it makes sense as a starting
> place for me.
>
> This refactoring would make it easier to test existing and new features
> of the storage system. It should also make the implementation easier to
> maintain and experiment with in the future.
>
> Presently a `_Client` is almost always created by
> `create_client_from_config` which mediates between `tahoe.cfg` and the
> current `_Client` Python API. A reasonable goal for this particular
> ticket could be a refactoring with allows `create_client_from_config` to
> perform a single, simple composition between `_Client` and an API
> responsible for the storage service (for example, create the storage
> service object and pass it to `_Client`, or vice-versa, or pass both to a
> third thing that does the necessary Twisted `Service` setup, etc).
>
> This would replace the current implementation which does some some
> storage service initialization in `create_client_from_config` _and_
> creates a `_Client` _and_ passes some of the storage service values to a
> method on the partially-initialized `_Client` where there is further
> `tahoe.cfg` inspection and the rest of the storage service setup process.
New description:
`allmydata.client._Client` combines many concerns. At least:
* metrics collection
* secrets management
* webui frontend initialization
* storage services
* storage client services
* blacklist management
* file "node" creation
* helper management
* sftp frontend initialization
This is just the list that's obvious from reading the names of its
methods.
Most of the logic for most of these things is already implemented by
something other than `_Client`. However, `_Client` ties them all together
in an obligatory "super object". Much of the functionality can be
disabled - but only through the very awkward interface of the bytes in a
`tahoe.cfg` file.
Instead of making `tahoe.cfg` the only control structure for what
`_Client` does and does not do, we should arrange to have a convenient
Python API that allows for composition of functionality. For starters,
this could exactly mirror the capabilities of `tahoe.cfg` (and should, in
fact, be the API that the contents of `tahoe.cfg` drives). The point
would be to make it easier to make these choices from Python code -
without a trip through an ini-style configuration file.
We could start by pulling any one of these pieces out but the storage
service piece is particularly interesting as it is undergoing a non-
trivial amount of maintenance these days so it makes sense as a starting
place for me.
This refactoring would make it easier to test existing and new features of
the storage system. It should also make the implementation easier to
maintain and experiment with in the future.
Presently a `_Client` is almost always created by
`create_client_from_config` which mediates between `tahoe.cfg` and the
current `_Client` Python API. A reasonable goal for this particular
ticket could be a refactoring with allows `create_client_from_config` to
perform a single, simple composition between `_Client` and an API
responsible for the storage service (for example, create the storage
service object and pass it to `_Client`, or vice-versa, or pass both to a
third thing that does the necessary Twisted `Service` setup, etc).
This would replace the current implementation which does some some storage
service initialization in `create_client_from_config` _and_ creates a
`_Client` _and_ passes some of the storage service values to a method on
the partially-initialized `_Client` where there is further `tahoe.cfg`
inspection and the rest of the storage service setup process.
--
--
Ticket URL: <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3931#comment:1>
Tahoe-LAFS <https://Tahoe-LAFS.org>
secure decentralized storage
More information about the tahoe-lafs-trac-stream
mailing list