Closed bryanchriswhite closed 1 year ago
Patch coverage: 45.45
% and project coverage change: -0.02
:warning:
Comparison is base (
f72e1f0
) 31.38% compared to head (2e4d60d
) 31.37%.
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.
I threw together a mindmap of my initial thinking, which was mainly focusd on whether this new API should be a debug-only thing (as it's being used in a "debug CLI" scenario). TLDR; I think "no" is the answer I landed on (plus some additional thinking):
mindmap
Q: should p2p peerstore provider be debug only?
NO
REASONING
Will likely fit better with future versions / refactors
r1(**Perhaps it would and/or already does make sense to split PeerstoreProvider into StakedPeerstoreProvider and UnstakedPeerstoreProvider)
CONSEQUENCES
c1[MUST design a non-debug way to access p2p module's peerstores]
eg[e.g.: add GetUnstakedPeerstore method to modules.P2PModule]
Does this fight against peerstore provider / modular design?
YES because...
p[provides multiple ways to access the same thing: un/staked-actor-router peerstore]
NO because...
allows any module to get either peerstore without having to know anything about p2p module
no other single module can support this interface
justified by the need in the CLI
Alternatives
?
Makes Peerstore interface type "module shared"; i.e. it must be moved to another package avoid potential import cycles
w[WORKAROUND: in #804, I'm working around the need for this change by defining a consumer-side interface which I assert that the P2P module implements, in addition to its module interface]
YES
REASONING
r1[Only currently needed in a low-level / debug scenarios]
CONSEQUENCES
c1[Simpler implementation; no need for PeerstoreProvider interface refactor #804]
c2[Harder to maintain and more complex to reason about; would likely rely on build tags]
** Here's what splitting PeerstoreProvider
into StakedPeerstoreProvider
and UnstakedPeerstoreProvider
would look like:
classDiagram
class IntegratableModule {
<<interface>>
+SetBus(bus Bus)
+GetBus() Bus
}
class PeerstoreProvider {
<<interface>>
}
class StakedPeerstoreProvider {
<<interface>>
+GetStakedPeerstoreAtHeight(height int) (Peerstore, error)
}
class UnstakedPeerstoreProvider {
<<interface>>
+GetUnstakedPeerstore() (Peerstore, error)
}
class persistencePeerstoreProvider
class rpcPeerstoreProvider
class p2pPeerstoreProvider {
-persistencePeerstoreProvider
-p2pModule P2PModule
}
class p2pModule
p2pPeerstoreProvider --o p2pModule
p2pPeerstoreProvider --* persistencePeerstoreProvider
p2pPeerstoreProvider --|> PeerstoreProvider
rpcPeerstoreProvider --|> StakedPeerstoreProvider
persistencePeerstoreProvider --|> StakedPeerstoreProvider
PeerstoreProvider --* StakedPeerstoreProvider
PeerstoreProvider --* UnstakedPeerstoreProvider
PeerstoreProvider --|> IntegratableModule
StakedPeerstoreProvider --|> IntegratableModule
UnstakedPeerstoreProvider --|> IntegratableModule
Description
PeerstoreProvider
interfacepersistencePeerstoreProvider
Before
After
Issue
Realted:
810
Dependants:
505
806
Type of change
Please mark the relevant option(s):
List of changes
modules.Module
with simplermodules.IntegratableModule
inPeerstoreProvider
interfacePeerstoreProvider#GetP2PConfig()
methodPeerstoreProvider#GetUnstakedPeerstore()
methodp2pPeerstoreProvider
implementation ofPeerstoreProvider
interfaceFactory
generic typeTesting
make develop_test
; if any code changes were mademake test_e2e
on k8s LocalNet; if any code changes were madee2e-devnet-test
passes tests on DevNet; if any code was changedRequired Checklist
godoc
format comments on touched members (see: tip.golang.org/doc/comment)If Applicable Checklist
shared/docs/*
if I updatedshared/*
README(s)