let metered store's readonly override with header aware store#22806
Draft
lucliu1108 wants to merge 2 commits into
Draft
let metered store's readonly override with header aware store#22806lucliu1108 wants to merge 2 commits into
lucliu1108 wants to merge 2 commits into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
MeteredTimestampedWindowStoreWithHeadersandMeteredSessionStoreWithHeadersnever overridereadOnly(IsolationLevel). Since Kafka Streams' Interactive Query (IQ) path always calls.readOnly(level)on a store before querying it (CompositeReadOnlyWindowStore.readOnlyStores()), both classes silently fell back to their superclass's generic, headers-ignorant ReadOnlyView/ReadOnlyView implementation — which deserializes the key before the value, instead of value-first-then-key (the order this feature actually requires, since the key's schema-ID header is only recoverable from the value's embedded headers). This threw "SerializationException: Error deserializing schema ID / IllegalArgumentException: Unknown magic byte!" whenever a headers-aware windowed/session store was queried via IQ after a restart+restore.Files changed
readOnly(IsolationLevel)override + new HeadersReadOnlyView inner class — the actual fix.houldUseHeadersFromValueToDeserializeKeyInReadOnlyFetchAllshouldUseHeadersFromValueToDeserializeKeyInReadOnlyFindSessionstest