Commit Graph
85 Commits
Author SHA1 Message Date
Robert Klotzner 3688e46d1b Don't wait for dispute coordinator (#5157)
* Don't wait for dispute coordinator

in backing and approval-voting - we are single threaded there, so this
is blocking everything.

* Add missing import.

* Don't warn on dropped receiver.
2022-03-18 15:15:50 +00:00
Robert Klotzner 569599853d Logs for large messages + metrics on size. (#5143)
* Logs for large messages + metrics on size.

* Fix typo
2022-03-17 19:57:35 +00:00
Robert Klotzner 582f8628ea Add more info to logs. (#5123) 2022-03-15 19:39:43 +00:00
Robert Klotzner acaf0d84fe Improve parachain liveness by reducing required number of backing votes (#5016)
* Let node side take advantage reduced requirements

in the runtime and hopefully improve liveness of parachains by means of
that.

* Fix tests.
2022-03-08 20:33:55 +00:00
93b7263019 Better spam slots handling (#4845)
* Only bypass spam slots on actualy approval/backing vote import.

* Fix spam slot treatment.

* More tests.

* Make sure backing statements import works.

* Aaaaaand the actual proper fix.

* Better docs + spelling fixes.

* Fix.

* Typo

Co-authored-by: Robert Habermeier <rphmeier@gmail.com>

* Fix doc.

* Update node/core/dispute-coordinator/src/real/initialized.rs

* minor rewording, line wrap

* fix test case

* Fix obsolete comment.

Co-authored-by: Robert Habermeier <rphmeier@gmail.com>
Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>
2022-02-17 15:18:52 +01:00
0302271053 Fix incomplete sorting. (#4795)
* Fix incomplete sorting.

* fmt.

* Better test.

* Update runtime/parachains/src/disputes.rs

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>

* chore fmt

* simplify the sorting for two items

* add test for assure duplicates are detected

* fixup tests

Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>
2022-01-27 18:16:31 +00:00
Robert Klotzner 8ec793e67f Bump substrate. (#4747) 2022-01-19 14:03:22 +01:00
Robert Klotzner fc594e5254 Report the actual missing session. (#4722) 2022-01-15 10:41:24 +00:00
Robert Klotzner f2bdd99532 Add some docs to prevent a time loop. (#4702)
* Add some docs to prevent a time loop.

* Review remarks.
2022-01-13 08:15:13 +00:00
Robert Klotzner 9514caee88 Small mostly doc improvements (#4661)
* Better docs on non initialized state.

* Document better what is happening.

* More precise errors.

* cargo fmt
2022-01-10 12:28:20 +01:00
Robert Klotzner 2f1643b430 Better error for spurious cache misses. (#4669)
Happened on Kusama for some not yet known reason.
2022-01-07 10:23:20 +00:00
Robert Klotzner 83c8afcbb9 Don't change rep on timeout in collator protocol. (#4642)
* Don't change rep on timeout in collator protocol.

* Fix tests.

* Fixes.
2022-01-04 11:40:20 +00:00
Robert Klotzner 0349595894 Better logs and metrics on PoV fetching. (#4593) 2021-12-24 08:11:29 +00:00
Robert Klotzner 846828f61c First step in implementing #4386 (#4437)
* First step in implementing https://github.com/paritytech/polkadot/issues/4386

This PR:

- Reduces MAX_UNSHARED_UPLOAD_TIME to 150ms
- Increases timeout on collation fetching to 1200ms
- Reduces limit on needed backing votes in the runtime

This PR does not yet reduce the number of needed backing votes on the
node as this can only be meaningfully enacted once the changed limit in
the runtime is live.

* Fix tests.

* Guide updates.

* Review remarks.

* Bump minimum required backing votes to 2 in runtime.

* Make sure node side code won't make runtime vomit.

* cargo +nightly fmt
2021-12-23 16:41:34 +00:00
f88d980252 Versi chainspec based on Rococo. (#4485)
* Versi chainspec based on Rococo.

* Fix.

* Fix compilation without features.

* Spelling

* Another typo.

* Support versi in native version

* 🤦

* Regenerated genesis for versi.

* Update cli/src/command.rs

Co-authored-by: Bastian Köcher <info@kchr.de>
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com>
2021-12-16 10:47:06 +00:00
Robert Klotzner bd5721fbf5 Revert loop prevention (#4472)
* Provisioner: Only include and sign bitfields on fresh leaves.
2021-12-13 12:20:49 +01:00
Robert Klotzner 34339c6805 Don't cache unavailable results. (#4509) 2021-12-10 23:52:20 +01:00
Robert Klotzner 0cafdd4d5e Some fixes the compiler pointed out to me (#4482)
* Fix bug in availability-distribution.

Old fetches would not get cancelled as intended.

* Fix a few more warnings.
2021-12-07 17:48:20 +01:00
Robert Klotzner ce27250cb5 Double time we give spawned tasks. (#4415)
* Double time we give spawned tasks.

* Increase time even more, for better robustness.
2021-11-30 16:44:58 +01:00
Robert KlotznerandLldenaurois 25974f2076 Dispute spam protection (#4134)
* Mostly notes.

* Better error messages.

* Introduce Fatal/NonFatal + drop back channel participation

- Fatal/NonFatal - in order to make it easier to use utility functions.
- We drop the back channel in dispute participation as it won't be
needed any more.

* Better error messages.

* Utility function for receiving `CandidateEvent`s.

* Ordering module typechecks.

* cargo fmt

* Prepare spam slots module.

* Implement SpamSlots mechanism.

* Implement queues.

* cargo fmt

* Participation.

* Participation taking shape.

* Finish participation.

* cargo fmt

* Cleanup.

* WIP: Cleanup + Integration.

* Make `RollingSessionWindow` initialized by default.

* Make approval voting typecheck.

* Get rid of lazy_static & fix approval voting tests

* Move `SessionWindowSize` to node primitives.

* Implement dispute coordinator initialization.

* cargo fmt

* Make queues return error instead of boolean.

* Initialized: WIP

* Introduce chain api for getting finalized block.

* Fix ordering to only prune candidates on finalized events.

* Pruning of old sessions in spam slots.

* New import logic.

* Make everything typecheck.

* Fix warnings.

* Get rid of obsolete dispute-participation.

* Fixes.

* Add back accidentelly deleted Cargo.lock

* Deliver disputes in an ordered fashion.

* Add module docs for errors

* Use type synonym.

* hidden docs.

* Fix overseer tests.

* Ordering provider taking `CandidateReceipt`.

... To be kicked on one next commit.

* Fix ordering to use relay_parent

as included block is not unique per candidate.

* Add comment in ordering.rs.

* Take care of duplicate entries in queues.

* Better spam slots.

* Review remarks + docs.

* Fix db tests.

* Participation tests.

* Also scrape votes on first leaf for good measure.

* Make tests typecheck.

* Spelling.

* Only participate in actual disputes, not on every import.

* Don't account backing votes to spam slots.

* Fix more tests.

* Don't participate if we don't have keys.

* Fix tests, typos and warnings.

* Fix merge error.

* Spelling fixes.

* Add missing docs.

* Queue tests.

* More tests.

* Add metrics + don't short circuit import.

* Basic test for ordering provider.

* Import fix.

* Remove dead link.

* One more dead link.

Co-authored-by: Lldenaurois <Ljdenaurois@gmail.com>
2021-11-19 17:08:21 +00:00
Robert Klotzner 6950ea66be Increase maximum chunk size to adjust for small networks. (#4220)
* Increase maximum chunk size to adjust for small networks.

* Issue warning on invalid merkle proofs.

* warn -> debug on invalid merkle proof.
2021-11-08 18:00:40 -06:00
Robert KlotznerandAndronik Ordian 6fde727c93 Fix misleading logs in collator protocol. (#4201)
* Fix misleading logs in collator protocol.

* Make logs debug again.

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-11-04 12:34:17 +01:00
Robert Klotzner 5f5358279f Fix wrong warning. (#4163) 2021-10-27 21:36:41 +00:00
Robert Klotzner 57a99c960f Silence some alerts due to overly verbose warnings. (#3946)
* statement-distribution: Only warn on relevant stuff.

* Silence warnings in availability-distribution.

* Demote more warnings.

* More consistency.

* info -> debug
2021-10-06 17:00:51 +00:00
Robert Klotzner 7c3b3c4a59 Log info about low connectivity and unreachable validators (#3916)
* Attempt to add log stats to gossip-support.

* WIP: Keep track of connected validators.

* Clarify metric.

* WIP: Make gossip support report connectivity.

* WIP: Fixing tests.

* Fix network bridge + integrate in overseer.

* Consistent naming.

* Fix logic error

* cargo fmt

* Pretty logs.

* cargo fmt

* Use `Delay` to trigger periodic checks.

* fmt

* Fix warning for authority set size of 1.

* More correct ratio report if there are no resolved validators.

* Prettier rendering of empty set.

* Fix typo.

* Another typo.

* Don't check on every leaf update.

* Make compatible with older rustc.

* Fix tests.

* Demote warning.
2021-09-27 16:30:02 +02:00
Robert Klotzner 63a520b056 Dispute distribution improvements (#3853)
* Better warning policy on dispute-distribution.

Network errors happen, only warn on a minimum number of failed attempts.

* Add metric to see how long it takes to get a dispute vote out.

* Let's be alert.
2021-09-17 12:10:50 +02:00
Robert Klotzner dde0918717 Raised nits on #3813 (#3844) 2021-09-16 16:05:41 +02:00
Robert KlotznerandAndronik Ordian 973183cfb1 Don't try to connect to ourselves. (#3855)
* Don't try to connecto to ourselves.

* Use swap_remove instead of remove O(1)

Co-authored-by: Andronik Ordian <write@reusable.software>

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-09-16 16:05:07 +02:00
Robert Klotzner de637b966a Better error messages. (#3835)
* Better error messages.

Right now, logged messages are hardly useful.

Together with https://github.com/paritytech/substrate/pull/9768, this
should help with debugging.

* cargo fmt
2021-09-14 14:18:32 +02:00
Robert Klotzner 135d9ae931 Put all authorities of a session into SessionInfo. (#3813)
* Make SessionInfo include all authorities

of the current session.

* Add missing import.

* Only take subset for assignment keys.

* Fix typo.

* Make spellcheck happy.

* Really.

* Fix test.

* More clear documentation.

* Update comments in `SessionInfo`.
2021-09-14 13:58:37 +02:00
Robert Klotzner a14b667723 Fix flaky availability-recovery test (#3812)
* Increase timeout in tests.

Fixes #3798

* Fix timeout.
2021-09-08 12:56:45 +00:00
Robert Klotzner ffcde1e5e7 Fixes/improvements for disputes (#3753)
* More debugging output.

* Fix chain selection in case of disputes.

* Fix flaky test.
2021-09-01 14:25:56 -05:00
e56efb82d9 Further improved availability recovery (#3711)
* WiP.

* Things compile.

* cargo fmt

* Passing tests + fix warnings.

* Metrics for availability recovery.

* Basic test.

* Fix typos and actually check for overflow.

* cargo fmt

* Register metrics.

* More tests.

* Fix warning.

* cargo +nightly fmt

* Fix metrics

* Get rid of unsafe.

* tabify

* spellcheck

Co-authored-by: Andronik Ordian <write@reusable.software>
Co-authored-by: Bastian Köcher <info@kchr.de>
2021-08-27 18:59:23 +02:00
Robert Klotzner 85897b5d36 Don't err on deactivated leaf during valiation. (#3708)
* Don't err on deactivated leaf during valiation.

* Fix error level + formatting of unrelated code.
2021-08-25 09:25:45 +02:00
Robert Klotzner 489a8e6da1 Fill up requests slots via launch_parallel_requests (#3681)
in case waiting for the next response takes too long.
2021-08-24 15:05:25 +02:00
Robert Klotzner d6abe70c06 Better logs. (#3650) 2021-08-19 20:07:59 +02:00
Robert Klotzner 1dafa08934 Provide dummy dispute coordinator by default. (#3661)
* Provide dummy dispute coordinator by default.

* cargo fmt
2021-08-19 17:03:33 +02:00
Robert Klotzner 55154a8d37 Remove request multiplexer (#3624)
* WIP: Get rid of request multiplexer.

* WIP

* Receiver for handling of incoming requests.

* Get rid of useless `Fault` abstraction.

The things the type system let us do are not worth getting abstracted in
its own type. Instead error handling is going to be merely a pattern.

* Make most things compile again.

* Port availability distribution away from request multiplexer.

* Formatting.

* Port dispute distribution over.

* Fixup statement distribution.

* Handle request directly in collator protocol.

+ Only allow fatal errors at top level.

* Use direct request channel for availability recovery.

* Finally get rid of request multiplexer

Fixes #2842 and paves the way for more back pressure possibilities.

* Fix overseer and statement distribution tests.

* Fix collator protocol and network bridge tests.

* Fix tests in availability recovery.

* Fix availability distribution tests.

* Fix dispute distribution tests.

* Add missing dependency

* Typos.

* Review remarks.

* More remarks.
2021-08-12 13:11:36 +02:00
Robert Klotzner d86bb658a0 Follow up for #3282 (#3571)
Incorporating post merge review remarks.
2021-08-06 18:18:13 +02:00
Robert KlotznerandAndronik Ordian e0b3c5cba0 Better size limits. (#3572)
* Better size limits.

* Remove reference to private repo.

* Update node/network/protocol/src/request_response/mod.rs

Fix statement response size.

Co-authored-by: Andronik Ordian <write@reusable.software>

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-08-04 17:00:56 +02:00
Robert Klotzner 1718ed1dcc Fix flaky test (#3569)
Fixes #3557
2021-08-04 14:15:44 +02:00
Robert KlotznerandAndronik Ordian 6994682a86 DoS protection on the collator protocol (#3446)
* Move on to next validator after timeout.

* Better naming.

* Wrong implementation of validator fetch timeouts.

* Validator side: Move on to next collator

if download takes too long.

* Drop multiple requests from same validator.

* Add test that next response is sent after timeout.

* Multiple requests by same validator should get dropped.

* Test that another collator is tried

after exclusive download time.

* Add dep.

* Cleanup.

* Merge fix.

* Review remarks.

* Fixes.

* Add log targets to trace logs

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-07-12 13:01:17 +02:00
Robert Klotzner b5257b2407 Dispute distribution implementation (#3282)
* Dispute protocol.

* Dispute distribution protocol.

* Get network requests routed.

* WIP: Basic dispute sender logic.

* Basic validator determination logic.

* WIP: Getting things to typecheck.

* Slightly larger timeout.

* More typechecking stuff.

* Cleanup.

* Finished most of the sending logic.

* Handle active leaves updates

- Cleanup dead disputes
- Update sends for new sessions
- Retry on errors

* Pass sessions in already.

* Startup dispute sending.

* Provide incoming decoding facilities

and use them in statement-distribution.

* Relaxed runtime util requirements.

We only need a `SubsystemSender` not a full `SubsystemContext`.

* Better usability of incoming requests.

Make it possible to consume stuff without clones.

* Add basic receiver functionality.

* Cleanup + fixes for sender.

* One more sender fix.

* Start receiver.

* Make sure to send responses back.

* WIP: Exposed authority discovery

* Make tests pass.

* Fully featured receiver.

* Decrease cost of `NotAValidator`.

* Make `RuntimeInfo` LRU cache size configurable.

* Cache more sessions.

* Fix collator protocol.

* Disable metrics for now.

* Make dispute-distribution a proper subsystem.

* Fix naming.

* Code style fixes.

* Factored out 4x copied mock function.

* WIP: Tests.

* Whitespace cleanup.

* Accessor functions.

* More testing.

* More Debug instances.

* Fix busy loop.

* Working tests.

* More tests.

* Cleanup.

* Fix build.

* Basic receiving test.

* Non validator message gets dropped.

* More receiving tests.

* Test nested and subsequent imports.

* Fix spaces.

* Better formatted imports.

* Import cleanup.

* Metrics.

* Message -> MuxedMessage

* Message -> MuxedMessage

* More review remarks.

* Add missing metrics.rs.

* Fix flaky test.

* Dispute coordinator - deliver confirmations.

* Send out `DisputeMessage` on issue local statement.

* Unwire dispute distribution.

* Review remarks.

* Review remarks.

* Better docs.
2021-07-09 04:29:53 +02:00
Robert KlotznerandSergei Shulepov 20993b32b1 Guide updates for disputes. (#3401)
* Guide updates for disputes.

* Working availability recovery flood protection.

* More fixes.

* Formatting.

* Fix.

* Update roadmap/implementers-guide/src/node/disputes/dispute-participation.md

Co-authored-by: Sergei Shulepov <sergei@parity.io>

* Review remarks.

Co-authored-by: Sergei Shulepov <sergei@parity.io>
2021-07-08 23:19:08 +02:00
Robert Klotzner 378905df9d Warn on low connectivity. (#3408)
* Warn on low connectivity.

* Better timeout and docs.

* Review remarks.
2021-07-05 21:22:03 +02:00
Robert Klotzner f293fb1025 Fix busy loops. (#3392) 2021-07-01 08:44:13 +02:00
Robert Klotzner e3340e44b5 Dispute distribution guide (#3158)
* Dispute distribution initial design.

* WIP.

* Dispute distribution guide update.

* Make invalid statement include `InvalidStatementKind`.

* Clarify the scope of disputes.

* A few fixes + introduced back pressure oneshot.

* Fixes and spam protection WIP.

* More spam considerations.

* More fixes.

* Fixes + add note about not dispute participating nodes.
2021-06-22 18:23:53 -05:00
Robert Klotzner 24d1eb40cc Increase PoV timeout slightly. (#3144) 2021-05-31 22:12:18 -05:00
Robert KlotznerandAndronik Ordian 9b06a38bb6 State can be finished due to Share message. (#3070)
* State can be finished due to `Share` message.

Therefoe a task can still be running in that state. Removed panic and
changed state name to reflect possibility of `Share` message.

* bump spec versions in kusama, polkadot and westend again III

* properly bump for the upcoming release

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-05-21 20:04:43 +02:00
Robert Klotzner 44c03a3633 Actually connect to new validators at session boundary. (#3055)
* Actually connect to new validators at session boundary.

* Add tracing.
2021-05-19 11:29:55 +00:00
Robert Klotzner 1e5f193765 Fix flaky test (#3002)
* Reporting peer might come first

before trying to request data, depending on scheduler.

* Better test.
2021-05-10 15:16:08 +00:00
Robert Klotzner c0df140ec6 Flood protection for large statements. (#2984)
* Flood protection for large statements.

* Add test for flood protection.

* Doc improvements.
2021-05-06 20:41:05 +02:00
Robert Klotzner 1508024a47 Some overdue cleanup (#2989)
* Cleanup obsolete code.

* Move session cache to requester.
2021-05-06 16:15:23 +02:00
Robert Klotzner 6663081bbd Guide updates for changed statement distribution (#2986)
* Guide updates WIP

* Add note.

* Statement distribution guide update.

* Small fixes.
2021-05-06 14:58:38 +02:00
Robert Klotzner 601a3781c1 Always connect in collator protocol. (#2980)
* Always connect in collator protocol.

* Fix unused import.

* We always issue connection requests now.

* Fix stupid boolean logic with one variable.

* Fix CI.
2021-05-06 12:54:54 +02:00
Robert Klotzner 795a526e6d Do peer connect later (as it happens in reality). (#2971)
Otherwise peer connect events occassionally happen before
`StatementFetchingReceiver` message.
2021-05-03 21:50:32 +02:00
Robert Klotzner 0dbdfef95e More secure Signed implementation (#2963)
* Remove signature verification in backing.

`SignedFullStatement` now signals that the signature has already been
checked.

* Remove unused check_payload function.

* Introduced unchecked signed variants.

* Fix inclusion to use unchecked variant.

* More unchecked variants.

* Use unchecked variants in protocols.

* Start fixing statement-distribution.

* Fixup statement distribution.

* Fix inclusion.

* Fix warning.

* Fix backing properly.

* Fix bitfield distribution.

* Make crypto store optional for `RuntimeInfo`.

* Factor out utility functions.

* get_group_rotation_info

* WIP: Collator cleanup + check signatures.

* Convenience signature checking functions.

* Check signature on collator-side.

* Fix warnings.

* Fix collator side tests.

* Get rid of warnings.

* Better Signed/UncheckedSigned implementation.

Also get rid of Encode/Decode for Signed! *party*

* Get rid of dead code.

* Move Signed in its own module.

* into_checked -> try_into_checked

* Fix merge.
2021-05-03 21:41:14 +02:00
Robert Klotzner c86a774b9d Send statements to own backing group first (#2927)
* Factor out runtime module into utils.

* First fatal error design.

* Better error handling infra.

* Error handling cleanup.

* Send to peers of our group first.

* Finish backing group prioritization.

* Little cleanup.

* More cleanup.

* Forgot to checkin error.rs.

* Notes.

* Runtime -> RuntimeInfo

* qed in debug assert.

* PolkaErr -> Fault.
2021-04-27 21:47:32 +02:00
Robert Klotzner dacde443f7 Infrastructure improvements (#2897)
* Factor out runtime module into utils.

* Add maybe_authority information to `PeerConnected` event.

We already gather this information in authority discovery, so we might
as well share it with others.

This opens up an easy path to trigger validators differently from normal
nodes, e.g. for prioritization. This change has become more important
now, that we just connect to all validators and therefore just have a
long peer list without any information about those nodes.

* Test fix.
2021-04-16 21:42:20 +02:00
Robert Klotzner d31c8a0dac Only accept requests from peers that got notified by us. (#2889) 2021-04-14 23:32:37 +02:00
Robert Klotzner d1d33abdf8 More tests for new request based statement distribution (#2875)
* More test coverage.

* Preserve peer order.

* Better test coverage.

* Even more test coverage.

* Add doc comment to `IndexMap`.

* Fix flaky test.

* Review remarks.

* Review remarks.
2021-04-12 16:15:25 +02:00
Robert Klotzner dd3733261b Max notification size -> 100k. (#2735) 2021-04-12 10:26:11 +02:00
Robert Klotzner 305375e1e4 Req/res optimization for statement distribution (#2803)
* Wip

* Increase proposer timeout.

* WIP.

* Better timeout values now that we are going to be connected to all nodes. (#2778)

* Better timeout values.

* Fix typo.

* Fix validator bandwidth.

* Fix compilation.

* Better and more consistent sizes.

Most importantly code size is now 5 Meg, which is the limit we currently
want to support in statement distribution.

* Introduce statement fetching request.

* WIP

* Statement cache retrieval logic.

* Review remarks by @rphmeier

* Fixes.

* Better requester logic.

* WIP: Handle requester messages.

* Missing dep.

* Fix request launching logic.

* Finish fetching logic.

* Sending logic.

* Redo code size calculations.

Now that max code size is compressed size.

* Update Cargo.lock (new dep)

* Get request receiver to statement distribution.

* Expose new functionality for responding to requests.

* Cleanup.

* Responder logic.

* Fixes + Cleanup.

* Cargo.lock

* Whitespace.

* Add lost copyright.

* Launch responder task.

* Typo.

* info -> warn

* Typo.

* Fix.

* Fix.

* Update comment.

* Doc fix.

* Better large statement heuristics.

* Fix tests.

* Fix network bridge tests.

* Add test for size estimate.

* Very simple tests that checks we get LargeStatement.

* Basic check, that fetching of large candidates is performed.

* More tests.

* Basic metrics for responder.

* More metrics.

* Use Encode::encoded_size().

* Some useful spans.

* Get rid of redundant metrics.

* Don't add peer on duplicate.

* Properly check hash

instead of relying on signatures alone.

* Preserve ordering + better flood protection.

* Get rid of redundant clone.

* Don't shutdown responder on failed query.

And add test for this.

* Smaller fixes.

* Quotes.

* Better queue size calculation.

* A bit saner response sizes.

* Fixes.
2021-04-09 21:30:12 +00:00
Robert Klotzner eb6786ad05 Better timeout values now that we are going to be connected to all nodes. (#2778)
* Better timeout values.

* Fix typo.

* Fix validator bandwidth.

* Fix compilation.
2021-03-31 22:34:12 +02:00
Robert Klotzner 6514e00144 Add tags to pov-fetcher. (#2768)
* Add tags to pov-fetcher.

* Add stage as well.

* Get rid of redundant tags.
2021-03-30 15:07:07 +02:00
Robert KlotznerandAndronik Ordian 0bc42785b4 availability-distribution: Retry failed fetches on next block. (#2762)
* availability-distribution: Retry on fail on next block.

Retry failed fetches on next block when still pending availability.

* Update node/network/availability-distribution/src/requester/fetch_task/mod.rs

Co-authored-by: Andronik Ordian <write@reusable.software>

* Fix existing tests.

* Add test for trying all validators.

* Add test for testing retries.

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-03-30 00:28:43 +02:00
Robert Klotzner 0a9fe852df Move non runtime related stuff into node/primitives (#2743)
* Remove stuff out of the runtime that does not belong there.

There might be more, but it is a start.

* White space fixes.

* Fix tests.

* Leave whitespace in ui tests alone.

* Add back zstd for no reason.

* Fix browser wasm (hopefully)
2021-03-29 02:15:44 +02:00
Robert Klotzner c6f07d8f31 Request based PoV distribution (#2640)
* Indentation fix.

* Prepare request-response for PoV fetching.

* Drop old PoV distribution.

* WIP: Fetch PoV directly from backing.

* Backing compiles.

* Runtime access and connection management for PoV distribution.

* Get rid of seemingly dead code.

* Implement PoV fetching.

Backing does not yet use it.

* Don't send `ConnectToValidators` for empty list.

* Even better - no need to check over and over again.

* PoV fetching implemented.

+ Typechecks
+ Should work

Missing:

- Guide
- Tests
- Do fallback fetching in case fetching from seconding validator fails.

* Check PoV hash upon reception.

* Implement retry of PoV fetching in backing.

* Avoid pointless validation spawning.

* Add jaeger span to pov requesting.

* Add back tracing.

* Review remarks.

* Whitespace.

* Whitespace again.

* Cleanup + fix tests.

* Log to log target in overseer.

* Fix more tests.

* Don't fail if group cannot be found.

* Simple test for PoV fetcher.

* Handle missing group membership better.

* Add test for retry functionality.

* Fix flaky test.

* Spaces again.

* Guide updates.

* Spaces.
2021-03-28 17:11:38 +02:00
Robert Klotzner 6ea6299bca Reduce network bridge logging verbosity (#2717)
* Those should really be trace.

- Very spammy
- And they in fact trace the execution
- Should not be enabled lightly - will slow network bridge down.

* Make report peers debug again.
2021-03-27 00:19:43 +01:00
Robert Klotzner 467f9bb51d Enable debug assert for real. (#2716) 2021-03-25 23:30:49 +01:00
Robert Klotzner 485e406058 Enable debug assertions on rococo. (#2708) 2021-03-25 15:45:31 +01:00
Robert Klotzner fa11c6d785 Unify maximum supported PoV size a bit. (#2691)
* Unify maximum supported PoV size a bit.

* Use MAX_POV_SIZE also in `HostConfiguration`.

* Fix types.
2021-03-24 15:48:36 +01:00
Robert Klotzner 0f8b6f2f6e Bigger is better. (#2687)
* Bigger is better.

Made all request response sizes 10 times bigger.

* The smaller the better.

* Update comment.

* Ah, bigger is still better.

Max PoV size for rococo is around 50Meg, compression ratio is about 3.4.
With 30 Meg we should be fine, even with crypto kitties in the PoV.
2021-03-24 13:29:59 +01:00
Robert Klotzner 59640a38bc Don't accept incoming connections for collators (#2644)
* Don't accept incoming connections for collators

on the `Collation` peer set.

* Better docs.
2021-03-19 07:20:38 +00:00
Robert Klotzner 503e2b74f9 Request based collation fetching (#2621)
* Introduce collation fetching protocol

also move to mod.rs

* Allow `PeerId`s in requests to network bridge.

* Fix availability distribution tests.

* Move CompressedPoV to primitives.

* Request based collator protocol: validator side

- Missing: tests
- Collator side
- don't connect, if not connected

* Fixes.

* Basic request based collator side.

* Minor fix on collator side.

* Don't connect in requests in collation protocol.

Also some cleanup.

* Fix PoV distribution

* Bump substrate

* Add back metrics + whitespace fixes.

* Add back missing spans.

* More cleanup.

* Guide update.

* Fix tests

* Handle results in tests.

* Fix weird compilation issue.

* Add missing )

* Get rid of dead code.

* Get rid of redundant import.

* Fix runtime build.

* Cleanup.

* Fix wasm build.

* Format fixes.

Thanks @andronik !
2021-03-18 09:06:36 +01:00
Robert Klotzner b6a78d2976 Mostly, let guide reflect #2579 (#2583)
* Statement distribution is now validator only.

* Avoid Arc creation where it is not necessarily needed.
2021-03-09 01:46:24 +01:00
Robert KlotznerandAndronik Ordian c0347f026a Jaeger spans for availability distribution (#2559)
* Logging functionality for spans.

* Jaeger spans for availability distribution.

* Fix instrumentation to use log target properly.

* Add some tracing instrumentation macros.

* Use int_tags instead of logs.

* Add span per iteration.

* Remove span::log functionality.

* Fix instrumentation log target for real.

* Add jaeger span to responding side as well.

* Revert "Fix instrumentation log target for real."

This reverts commit e1c2a2e6ff6f257e702f07d8a77c2668af92b0ef.

* Revert "Fix instrumentation to use log target properly."

This reverts commit 7caa0bd1acc6fe9727bb3a91851560d756c40ab8.

* target -> subsystem in instrumentatio macro

target is not correct either, and the correct way of using a top level
target = LOG_TARGET does not work, as the macro expects a string literal
and gets confused by the constant `LOG_TARGET`.

* Use kebab-case for spa names.

Co-authored-by: Andronik Ordian <write@reusable.software>

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-03-04 17:03:24 +00:00
Robert Klotzner 95f1b09b65 Fix links in docs. (#2556) 2021-03-04 13:58:56 +00:00
Robert Klotzner 8206a77164 Guide update for availability distribution. (#2554)
* Guide update for availability distribution.

* Link fix.

* Hopefully fixed implementers guide build.
2021-03-03 09:54:27 -06:00
Robert KlotznerandAndronik Ordian 78ac4b7add Whole subsystem test for new availability-distribution (#2552)
* WIP: Whole subsystem test.

* New tests compile.

* Avoid needless runtime queries for no validator nodes.

* Make tx and rx publicly accessible in virtual overseer.

This simplifies mocking in some cases, as tx can be cloned, but rx can
not.

* Whole subsystem test working.

* Update node/network/availability-distribution/src/session_cache.rs

Co-authored-by: Andronik Ordian <write@reusable.software>

* Update node/network/availability-distribution/src/session_cache.rs

Co-authored-by: Andronik Ordian <write@reusable.software>

* Document better what `None` return value means.

* Get rid of BitVec dependency.

* Update Cargo.lock

* Hopefully fixed implementers guide build.

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-03-03 16:23:15 +01:00
Robert Klotzner 48409e5548 Request based availability distribution (#2423)
* WIP

* availability distribution, still very wip.

Work on the requesting side of things.

* Some docs on what I intend to do.

* Checkpoint of session cache implementation

as I will likely replace it with something smarter.

* More work, mostly on cache

and getting things to type check.

* Only derive MallocSizeOf and Debug for std.

* availability-distribution: Cache feature complete.

* Sketch out logic in `FetchTask` for actual fetching.

- Compile fixes.
- Cleanup.

* Format cleanup.

* More format fixes.

* Almost feature complete `fetch_task`.

Missing:

- Check for cancel
- Actual querying of peer ids.

* Finish FetchTask so far.

* Directly use AuthorityDiscoveryId in protocol and cache.

* Resolve `AuthorityDiscoveryId` on sending requests.

* Rework fetch_task

- also make it impossible to check the wrong chunk index.
- Export needed function in validator_discovery.

* From<u32> implementation for `ValidatorIndex`.

* Fixes and more integration work.

* Make session cache proper lru cache.

* Use proper lru cache.

* Requester finished.

* ProtocolState -> Requester

Also make sure to not fetch our own chunk.

* Cleanup + fixes.

* Remove unused functions

- FetchTask::is_finished
- SessionCache::fetch_session_info

* availability-distribution responding side.

* Cleanup + Fixes.

* More fixes.

* More fixes.

adder-collator is running!

* Some docs.

* Docs.

* Fix reporting of bad guys.

* Fix tests

* Make all tests compile.

* Fix test.

* Cleanup + get rid of some warnings.

* state -> requester

* Mostly doc fixes.

* Fix test suite.

* Get rid of now redundant message types.

* WIP

* Rob's review remarks.

* Fix test suite.

* core.relay_parent -> leaf for session request.

* Style fix.

* Decrease request timeout.

* Cleanup obsolete errors.

* Metrics + don't fail on non fatal errors.

* requester.rs -> requester/mod.rs

* Panic on invalid BadValidator report.

* Fix indentation.

* Use typed default timeout constant.

* Make channel size 0, as each sender gets one slot anyways.

* Fix incorrect metrics initialization.

* Fix build after merge.

* More fixes.

* Hopefully valid metrics names.

* Better metrics names.

* Some tests that already work.

* Slightly better docs.

* Some more tests.

* Fix network bridge test.
2021-02-26 11:58:07 -06:00
Robert Klotzner cfcde3d3b0 End multiplexer stream once one of its inputs end. (#2380)
* End multiplexer stream once one of its inputs end.

Also add test, that we don't panic once a stream is exhausted.

* Don't fuse already fused stream.
2021-02-04 11:31:36 +00:00
0cb1ccd122 Generic request/response infrastructure for Polkadot (#2352)
* Move NetworkBridgeEvent to subsystem::messages.

It is not protocol related at all, it is in fact only part of the
subsystem communication as it gets wrapped into messages of each
subsystem.

* Request/response infrastructure is taking shape.

WIP: Does not compile.

* Multiplexer variant not supported by Rusts type system.

* request_response::request type checks.

* Cleanup.

* Minor fixes for request_response.

* Implement request sending + move multiplexer.

Request multiplexer is moved to bridge, as there the implementation is
more straight forward as we can specialize on `AllMessages` for the
multiplexing target.

Sending of requests is mostly complete, apart from a few `From`
instances. Receiving is also almost done, initializtion needs to be
fixed and the multiplexer needs to be invoked.

* Remove obsolete multiplexer.

* Initialize bridge with multiplexer.

* Finish generic request sending/receiving.

Subsystems are now able to receive and send requests and responses via
the overseer.

* Doc update.

* Fixes.

* Link issue for not yet implemented code.

* Fixes suggested by @ordian - thanks!

- start encoding at 0
- don't crash on zero protocols
- don't panic on not yet implemented request handling

* Update node/network/protocol/src/request_response/v1.rs

Use index 0 instead of 1.

Co-authored-by: Andronik Ordian <write@reusable.software>

* Update node/network/protocol/src/request_response.rs

Co-authored-by: Andronik Ordian <write@reusable.software>

* Fix existing tests.

* Better avoidance of division by zoro errors.

* Doc fixes.

* send_request -> start_request.

* Fix missing renamings.

* Update substrate.

* Pass TryConnect instead of true.

* Actually import `IfDisconnected`.

* Fix wrong import.

* Update node/network/bridge/src/lib.rs

typo

Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com>

* Update node/network/bridge/src/multiplexer.rs

Remove redundant import.

Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com>

* Stop doing tracing from within `From` instance.

Thanks for the catch @tomaka!

* Get rid of redundant import.

* Formatting cleanup.

* Fix tests.

* Add link to issue.

* Clarify comments some more.

* Fix tests.

* Formatting fix.

* tabs

* Fix link

Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>

* Use map_err.

Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>

* Improvements inspired by suggestions by @drahnr.

- Channel size is now determined by function.
- Explicitely scope NetworkService::start_request.

Co-authored-by: Andronik Ordian <write@reusable.software>
Co-authored-by: Pierre Krieger <pierre.krieger1708@gmail.com>
Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>
2021-02-03 20:21:09 +00:00
Robert KlotznerandAndronik Ordian 32d4670b0d Some refactoring in network-bridge in the course of dealing with #2177 (#2263)
* More doc fixes.

* Minor refactorings in the process of #2177

By having everything peer set related depend directly on the enum the
code becomes more clear and it is also straight forward to add more
peersets/protocols as the compiler will complain if you forget to
implement parts of it.

* Add peer set infos on startup properly

For feature real_overseer.

+ Fixes from review. Thanks @coriolinus and @ordian!

* More structure in network-bridge

Some changes, which would have helped me in groking the code faster.

Entry points/public types more to the top. Factored out implementation
in their own files, to clear up the top-level view.

* Get rid of local ProtocolName type definition.

Does not add much at this level.

* Fix tests + import cleanup.

* Make spaces tabs.

* Clarify what correct parameters to send_message are

* Be more less vague in docs of send_message.

* Apply suggestions from code review

Extend copyright on new files to 2021 as well.

Co-authored-by: Andronik Ordian <write@reusable.software>

Co-authored-by: Andronik Ordian <write@reusable.software>
2021-01-14 10:29:02 +00:00
Robert Klotzner 9ebb9015d3 Some typos and misspellings in docs I found, during my studies. (#2144)
* Fix stale link to overseer docs

* Some typos and mispellings in docs/comments

I found during studying how Polkadot works.
2020-12-18 18:31:43 -05:00