Added `WithScoreLedger` Bitswap option (#430)
* Separate decision engine ledger on two parts: score and the wantlist
This is the first step to make external decision logic (tagging
peers with score values) possible.
The wantlist still resides in the original `ledger` struct while
sent/received byte accounting and scores are extracted to the new
`scoreledger` struct managed by the original `scoreWorker()` logic.
The accounting is integrated into the `Engine` via `ScoreLedger`
interface making it possible to replace the original `scoreWorker()`
with some other logic. The interface, however, doesn't allow a
score logic to directly touch peer tags: the logic may decide about
score values while tagging itself is still under control of Engine.
Note: with this commit it's yet not possible to replace the original
score logic because there is no public methods for that.
* Added "WithScoreLedger" Bitswap option
New `WithScoreLedger(decision.ScoreLedger)` option in the `bitswap`
package is the way to connect a custom `ScoreLedger` implementation
to the decision engine. The `Engine` now has the corresponding
`UseScoreLedger(ScoreLedger)` method.
The `ScoreLedger` and `ScorePeerFunc` types are exposed from the
internal `decision` package to the public one.
Because its options are processed by the `Bitswap` after construction
of its parts but before starting of the engine, the default
`scoreLedger` initialization is moved from `newEngine()` to
`StartWorkers()`.
New `TestWithScoreLedger` test is added. The test checks for start and
stop of the testing score ledger implementation that is specified via
`WithScoreLedger` option.
* Combine score ledger start with initialization of the score function
Having a separate `Init(ScoreFunc)` method seems redundant (thx
@dirkmc for pointing about that). As a bonus, the two-step ledger
starting process is now enclosed in the `startScoreLedger()` function.
* Let's call Stop() to stop a ScoreLedger
The `Close()` method was there to stop the ledger. Let call it
`Stop()` now.
* Get return of the blank Receipt out of conditional block
Explicitly form it as the final resort.
Co-authored-by: Paul Wolneykien <manowar@altlinux.org>
Showing
Please register or sign in to comment