In order to implement weaveworks/weave#2187 we need a way to expose and restore 'indirect peers' - targets that have been added via peer discovery instead of InitiateConnections.
weaveworks/weave#2317 implements the changes in the router that depend on this modification.
This is pretty grotty, and really only meant as a strawman with the hope someone else can think of a cleaner way. Some possibilities:
Have additional methods specifically to extract and restore indirect peers (meh)
Modify InitiateConnections and Targets so that they take/return a slice of a new struct which has a type field (e.g. direct or indirect) instead of string
Have some kind of memento API that takes/returns an opaque interface{} blob that can be saved and restored by an external agent (this might complicate matters if the router ever has to do a schema upgrade of the datastore)
Inject the ConnectionMaker with some kind of interface that it uses at appropriate points to a) get a set of direct/indirect peers (e.g. in newConnectionMaker) and b) notify when they have changed (e.g. on InitiateConnections/ForgetConnections or when new targets are added through discovery)
In order to implement weaveworks/weave#2187 we need a way to expose and restore 'indirect peers' - targets that have been added via peer discovery instead of
InitiateConnections
.weaveworks/weave#2317 implements the changes in the router that depend on this modification.
This is pretty grotty, and really only meant as a strawman with the hope someone else can think of a cleaner way. Some possibilities:
InitiateConnections
andTargets
so that they take/return a slice of a new struct which has a type field (e.g. direct or indirect) instead of stringinterface{}
blob that can be saved and restored by an external agent (this might complicate matters if the router ever has to do a schema upgrade of the datastore)ConnectionMaker
with some kind of interface that it uses at appropriate points to a) get a set of direct/indirect peers (e.g. innewConnectionMaker
) and b) notify when they have changed (e.g. onInitiateConnections
/ForgetConnections
or when new targets are added through discovery)Thoughts?