Change TriggerState finished bitset coder to a SentinelBitSetCoder#38139
Change TriggerState finished bitset coder to a SentinelBitSetCoder#38139arunpandianp wants to merge 6 commits intoapache:masterfrom
Conversation
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request introduces a specialized coder, SentinelBitSetCoder, to handle BitSet serialization in scenarios where distinguishing between an empty bitset and a missing one is required. By ensuring backward compatibility with the existing BitSetCoder, this change allows for safer state management within the trigger state machine runner without breaking existing data pipelines. Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. Footnotes
|
6653fdd to
70e69b8
Compare
SentinelBitSetCoder is same as BitSetCoder except that it encodes empty bitset as a single element 0 byte array. This allows checking if the finished bitset is empty or missing. SentinelBitSetCoder and BitSetCoder are state compatible. Both coders can decode encoded bytes from the other coder successfully.
70e69b8 to
b24494f
Compare
|
R: @scwhittle |
|
Stopping reviewer notifications for this pull request: review requested by someone other than the bot, ceding control. If you'd like to restart, comment |
|
|
||
| @Override | ||
| public boolean consistentWithEquals() { | ||
| return true; |
There was a problem hiding this comment.
Not sure if this should be true/false.
Reading the doc, true here means if encodedBytes match then decoded objects are equals to each other. It doesn't say if encodedBytes does not match then decoded objects are not equals to each other.
There was a problem hiding this comment.
injective in that comment means 1:1 so I think it implies that serializedA == serializedB if and only if A.equals(B)
There was a problem hiding this comment.
Taking SentinelBitSetCoder.java in isolation, returning true here is valid and when serialized bytes are same the objects are same and vice versa.
I am thinking if we need to do anything special for the case where SentinelBitSetCoder will decode bytes encoded by BitSetCoder after a job update. Based on the usage in TriggerStateMachineRunner, It seems like we don't need to do anything special. Not sure if I'm missing anything.
|
|
||
| @Override | ||
| public boolean consistentWithEquals() { | ||
| return true; |
There was a problem hiding this comment.
injective in that comment means 1:1 so I think it implies that serializedA == serializedB if and only if A.equals(B)
| if (value == null) { | ||
| throw new CoderException("cannot encode a null BitSet"); | ||
| } | ||
| byte[] bytes = value.isEmpty() ? new byte[] {0} : value.toByteArray(); |
There was a problem hiding this comment.
this already seems to be what value.toByteArray() does, am I missing something?
https://github.com/openjdk-mirror/jdk7u-jdk/blob/master/src/share/classes/java/util/BitSet.java#L291
There was a problem hiding this comment.
value.toByteArray() has return new byte[0]; which returns an empty byte array. Here we return a single zero element byte array
SentinelBitSetCoder is same as BitSetCoder except that it encodes empty bitset as a single element 0 byte array.
This allows checking if the finished bitset is empty or missing #37574.
SentinelBitSetCoder and BitSetCoder are state compatible. Both coders can decode encoded bytes from the other coder successfully.