consensus: check block parts don't exceed maximum block bytes#5431
consensus: check block parts don't exceed maximum block bytes#5431
Conversation
Codecov Report
@@ Coverage Diff @@
## master #5431 +/- ##
==========================================
- Coverage 61.40% 61.35% -0.06%
==========================================
Files 259 259
Lines 23442 23452 +10
==========================================
- Hits 14395 14389 -6
- Misses 7588 7603 +15
- Partials 1459 1460 +1
|
| count uint32 | ||
| // a count of the total size (in bytes). Used to ensure that the | ||
| // part set doesn't exceed the maximum block bytes | ||
| byteSize int64 |
There was a problem hiding this comment.
it matches MaxBytes in the Block Params which is also int64. tbh it's still a relatively arbitrary number
| if err != nil { | ||
| return added, err | ||
| } | ||
| if cs.ProposalBlockParts.ByteSize() > cs.state.ConsensusParams.Block.MaxBytes { |
There was a problem hiding this comment.
Could the same thing be achieved by doing?
reader := io.LimitReader(
cs.ProposalBlockParts.GetReader(),
cs.state.ConsensusParams.Block.MaxBytes)
bz, err := ioutil.ReadAll(reader)
There was a problem hiding this comment.
Is this more performant?
There was a problem hiding this comment.
I am not sure if its more performant but causes fewer changes and I believe mimics the previous behavior. I would have to check what amino was doing.
|
could u also cheer-pick 433bdf5 onto v0.34.0-rc5 branch? |
| count uint32 | ||
| // a count of the total size (in bytes). Used to ensure that the | ||
| // part set doesn't exceed the maximum block bytes | ||
| byteSize int64 |
There was a problem hiding this comment.
It would've been even simpler to just calculate the size on the fly in ByteSize(), this isn't performance critical.
There was a problem hiding this comment.
Yeah true but it's a relatively minor difference right?
There was a problem hiding this comment.
Just less stuff that can go wrong :)
* docs: specify TM version in go tutorials (#5427) Closes #5425 * privval: allow passing options to NewSignerDialerEndpoint (#5434) Required for #5291 to set timeouts for remote signers. * config: set statesync.rpc_servers when generating config file (#5433) Required for #5291, to generate configuration files with state sync RPC servers. * consensus: check block parts don't exceed maximum block bytes (#5431) * ci: docker remvoe circleci and add github action (#5420) * privval: fix ping message encoding (#5441) Fixes #5371. * docs: revise ADR 56, documenting short term decision around amnesia evidence (#5440) * light: expand on errors and docs (#5443) * test: add end-to-end testing framework (#5435) Partial fix for #5291. For details, see [README.md](https://github.com/tendermint/tendermint/blob/erik/e2e-tests/test/e2e/README.md) and [RFC-001](https://github.com/tendermint/tendermint/blob/master/docs/rfc/rfc-001-end-to-end-testing.md). This only includes a single test case under `test/e2e/tests/`, as a proof of concept - additional test cases will be submitted separately. A randomized testnet generator will also be submitted separately, there a currently just a handful of static testnets under `test/e2e/networks/`. This will eventually replace the current P2P tests and run in CI. * changelog: add missing date to v0.33.5 release, fix indentation (#5454) I forgot to add the date when we cut 0.33.5. This fixes that. It also fixes a header indentation issue for 0.33.8. * test: add basic end-to-end test cases (#5450) Partial fix for #5291. This adds a basic set of test cases for core network invariants. Although small, it is sufficient to replace and extend the current set of P2P tests. Further test cases can be added later. * test: add GitHub action for end-to-end tests (#5452) Partial fix for #5291. * fix RPC blockresults reutrn (#5459) ## Description In blocks_results we use the proto definition of abciResponses: https://github.com/tendermint/tendermint/blob/2672b91ab099b8b02f3afabae4a0a745acd93c3f/rpc/core/blocks.go#L152-L155, this leads to the use of the proto definition of the pubkey which is an interface in go (oneof). The interface must be registered with the JSON encoder to have it work correctly. A clearer divide between proto types and native types is needed. Closes: #XXX * circleci: remove Gitian reproducible_builds job (#5462) * docs: fix links to adr 56 (#5464) ## Description fix broken link from a previous change * test: remove P2P tests (#5453) Co-authored-by: Anton Kaliaev <anton.kalyaev@gmail.com> Co-authored-by: Erik Grinaker <erik@interchain.berlin> Co-authored-by: Callum Waters <cmwaters19@gmail.com> Co-authored-by: Marko <marbar3778@yahoo.com> Co-authored-by: Tess Rinearson <tess.rinearson@gmail.com>
* docs: specify TM version in go tutorials (#5427) Closes #5425 * privval: allow passing options to NewSignerDialerEndpoint (#5434) Required for #5291 to set timeouts for remote signers. * config: set statesync.rpc_servers when generating config file (#5433) Required for #5291, to generate configuration files with state sync RPC servers. * consensus: check block parts don't exceed maximum block bytes (#5431) * ci: docker remvoe circleci and add github action (#5420) * privval: fix ping message encoding (#5441) Fixes #5371. * docs: revise ADR 56, documenting short term decision around amnesia evidence (#5440) * light: expand on errors and docs (#5443) * makefile: config build-docs for branch and path prefix * update versions with new 0.33 branch Co-authored-by: Anton Kaliaev <anton.kalyaev@gmail.com> Co-authored-by: Erik Grinaker <erik@interchain.berlin> Co-authored-by: Callum Waters <cmwaters19@gmail.com> Co-authored-by: Marko <marbar3778@yahoo.com>
| parts: parts, | ||
| partsBitArray: partsBitArray, | ||
| count: total, | ||
| byteSize: int64(len(data)), |
There was a problem hiding this comment.
i think this is culprit, you should be accounting for the parts not the entire struct
Description
Closes: #5423