-
Notifications
You must be signed in to change notification settings - Fork 465
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[persist] Structured file format #31080
base: main
Are you sure you want to change the base?
Conversation
ef767c6
to
60af8bb
Compare
One risk here is that what parallel workloads finds is usually harder to reproduce than other tests. I'll trigger a one-off run at least to see what would happen if we default all of CI to structured. Edit: Done: #31101 |
Aight! Note that feature benchmarks and upgrade tests are very likely to fail; unsure about the rest of them. |
That kind of failure is ok. I'm more hoping to catch some wrong result or panic. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No wrong results, no panics, just some timeouts, and the expected upgrade errors. So all good from my side
We built this for the streaming iterator, but it works well here too.
In particular, don't decode K/Vs when we have an override set, and make sure every K/V only gets decoded once.
43bc2c2
to
e60157d
Compare
Found and fixed the performance regression - this should be ready for review. (Nightly run with clean benchmarks. The only failure is in data ingest, which I think is the recent Azure issue?) |
Correct, please ignore. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
WOOHOO!
let next = if self.part_cursor < self.timestamps.len() { | ||
let next_idx = self.part_cursor; | ||
self.part_cursor += 1; | ||
let mut t = T::decode(self.timestamps.values()[next_idx].to_le_bytes()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is probably fine, but I'm a bit surprised to see a .to_le_bytes()
here? Feels like a bit of an abstraction leakage
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added a comment about this... it's an artifact of not always reading data from ColumnarRecords
, where this code used to live. I've left a comment that we should re-encapsulate it once we're all in on structured data, if that feels like enough to cover it?
Motivation
Adds a new on-disk file format for Persist - the non-dual-write structured-data-only version.
We'd like this format to be supported in our on-prem releases, so folks aren't stuck with the migration midpoint.
Tips for reviewer
I've intentionally left this off in CI, out of the parallel workload. For our existing cloud envs I think it's most important to verify that the (substantial) refactorings here don't cause any regression for existing flag settings. However, it is enabled in parallel workload so we should be able to spot any bugs. (And empirically those tests are good at finding bugs in this corner of Persist.)
Checklist
$T ⇔ Proto$T
mapping (possibly in a backwards-incompatible way), then it is tagged with aT-proto
label.