Skip to content

add extension method for prost::Message for encoding to Bytes#11344

Merged
tdyas merged 2 commits into
pantsbuild:masterfrom
tdyas:prost_to_bytes_helper
Dec 19, 2020
Merged

add extension method for prost::Message for encoding to Bytes#11344
tdyas merged 2 commits into
pantsbuild:masterfrom
tdyas:prost_to_bytes_helper

Conversation

@tdyas
Copy link
Copy Markdown
Contributor

@tdyas tdyas commented Dec 19, 2020

Follow-up to #11307 (comment) to add a to_bytes helper as an extension function to encode prost::Message protobuf types to Bytes. Includes roundtrip unit test.

Copy link
Copy Markdown
Contributor

@illicitonion illicitonion left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

let bytes_to_store = bincode::serialize(&PlatformAndResponseBytes {
platform: result.platform,
response_bytes,
response_bytes: response_bytes.to_vec(),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe change the type of response_bytes to Bytes to avoid the copy here?

Copy link
Copy Markdown
Contributor Author

@tdyas tdyas Dec 19, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought about that but, given this is stored in the LMDB local cache, I would then need to reason about whether there is a difference in the encoding of PlatformAndResponseBytes between the Vec<u8> and Bytes forms of this field. And, if there is a difference, then Pants would fail to decode users' existing cache entries which is backwards incompatible. That's too much complexity for what this PR does. That conversion should be done in a separate PR if wanted.

@tdyas tdyas merged commit ab99218 into pantsbuild:master Dec 19, 2020
@tdyas tdyas deleted the prost_to_bytes_helper branch December 19, 2020 03:37
tdyas pushed a commit that referenced this pull request Dec 20, 2020
### Problem

#11344 introduced a `.to_bytes()` helper for protobuf messages. However, in one spot, this introduced a unnecessary copy because the result is converted to a `Vec<u8>` immediately.

### Solution

Remove the unnecessary copy by encoding into a `Vec<u8>` directly. 

It might be possible to switch the `PlatformAndResponseBytes` struct to use `Bytes` instead of `Vec<u8>` but that would require reasoning about whether it would change the format of the struct when stored in the cache, which I want to avoid having to do for now.

### Result

Existing tests pass.
@stuhood stuhood mentioned this pull request Dec 29, 2020
stuhood added a commit that referenced this pull request Dec 29, 2020
### Internal Changes

* Fix too many line breaks for options in docs site ([#11377](#11377))

* Use more newlines in options help messages ([#11372](#11372))

* Fix some newlines not rendering correctly on docsite ([#11371](#11371))

* Fix formatting for `./pants subsystems` and `./pants targets` ([#11368](#11368))

* Simplify `generate_docs.py` to no longer require manually generating the input data ([#11363](#11363))

* Use the whole description for `./pants help $subsystem` ([#11361](#11361))

* Use newlines in `./pants help $target_type` ([#11355](#11355))

* [internal] Install rustup on the lint shards. ([#11392](#11392))

* Install Rust through global, pre-installed Rustup ([#11256](#11256))

* Revert "Add goals to run_info (#11374)" ([#11379](#11379))

* Add goals to run_info ([#11374](#11374))

* Update all rust dependencies within their declared ranges. ([#11366](#11366))

* Update to nails 0.11.0. ([#11370](#11370))

* cleanup some futures-related references ([#11360](#11360))

* [internal] Switch to toolchain pants plugin ([#11357](#11357))

* Simplify and fix the @ensure_daemon decorator. ([#11356](#11356))

* restore some try_future uses that were recently removed ([#11353](#11353))

* remove all remaining uses of futures v0.1.x (in favor of v0.3.x) ([#11352](#11352))

* Prepare the 1.30.2 release notes. ([#11351](#11351))

* remove remaining futures v0.1.x uses from fs/store and downstream callers ([#11346](#11346))

* fix Prost revision that did not get updated in prior PR ([#11345](#11345))

* add extension method for prost::Message for encoding to Bytes ([#11344](#11344))

* Stop installing Cmake, Go, and Protoc when bootstrapping Rust ([#11336](#11336))

* Automatically set the version in generate_docs.py ([#11337](#11337))

* Prepare 2.1.1. ([#11334](#11334))

* Prepare 2.0.1. ([#11333](#11333))

* Prepare the 1.30.2rc3 release notes. ([#11327](#11327))

* Prepare 2.0.1rc4 (again). ([#11323](#11323))

* Add type annotations around Subsystem class ([#11389](#11389))

* Support deprecation_start_version in help info. ([#11350](#11350))

[ci skip-rust]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants