-
Notifications
You must be signed in to change notification settings - Fork 86
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
[compat][server][client][test] Global RT DIV improvement (part 2): Chunking support for DIV message #1257
Conversation
...ts/da-vinci-client/src/main/java/com/linkedin/davinci/kafka/consumer/StoreIngestionTask.java
Outdated
Show resolved
Hide resolved
...ts/da-vinci-client/src/main/java/com/linkedin/davinci/kafka/consumer/StoreIngestionTask.java
Outdated
Show resolved
Hide resolved
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.
Just some minor comments. No need to be a blocker.
...a-vinci-client/src/test/java/com/linkedin/davinci/kafka/consumer/StoreIngestionTaskTest.java
Outdated
Show resolved
Hide resolved
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.
Thanks for the 2nd part of the change. I missed the first part but I went over the first PR description to make sure I am following. Left some comments but it should be easy to resolve
internal/venice-common/src/main/resources/avro/GlobalDivState/v-15/GlobalDivState.avsc
Show resolved
Hide resolved
clients/da-vinci-client/src/main/java/com/linkedin/davinci/utils/ChunkAssembler.java
Show resolved
Hide resolved
...ts/da-vinci-client/src/main/java/com/linkedin/davinci/kafka/consumer/StoreIngestionTask.java
Show resolved
Hide resolved
...ient/src/main/java/com/linkedin/davinci/kafka/consumer/LeaderFollowerStoreIngestionTask.java
Show resolved
Hide resolved
…unking support for DIV message This change mainly focuses on adding chunking support for DIV messages when they are produced to Kafka topics, as the size of DIV message can be large. We leverage today's chunking mechanism for regular records and extend it to support DIV with the following modifications: 1. All the DIV messages are of type {@link MessageType#CONTROL_MESSAGE_DIV} in its KafkaKey and their corresponding KafkaMessageEnvelope uses Put as the payload. 2. Inside the Put payload, the actual message is stored in the putValue field and the schemaId can have the following cases: - If the DIV message is non-chunked, the schemaId is set to GLOBAL_DIV_STATE. - If the DIV message is chunk message, the schemaId is set to CHUNK. - If the DIV message is a chunk manifest message, the schemaId is set to CHUNKED_VALUE_MANIFEST. 3. ChunkAssembler is adapted, on the receiver side, to buffer, assemble, and deserialize DIV messages (chunked/non-chunked).
1aa1844
to
88d1d2d
Compare
internal/venice-common/src/main/java/com/linkedin/venice/writer/WriterChunkingHelper.java
Show resolved
Hide resolved
internal/venice-common/src/main/java/com/linkedin/venice/kafka/protocol/enums/MessageType.java
Show resolved
Hide resolved
...nice-common/src/main/java/com/linkedin/venice/serialization/avro/AvroProtocolDefinition.java
Show resolved
Hide resolved
internal/venice-common/src/test/java/com/linkedin/venice/writer/VeniceWriterUnitTest.java
Show resolved
Hide resolved
this.divChunkAssembler = | ||
builder.getDivChunkAssembler() != null ? builder.getDivChunkAssembler() : new ChunkAssembler(storeName); |
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.divChunkAssembler = | |
builder.getDivChunkAssembler() != null ? builder.getDivChunkAssembler() : new ChunkAssembler(storeName); |
nit: Can this be achieved by just reusing chunkAssembler
? They seem the same to me, other than the unit test access via builder
?
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.
Could internal ChunkAssembler.inMemoryStorageEngine
have a conflict if use the same instance?
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.
It's not impossible, but I think a conflict is improbable if the key is something very specific
.../venice-test-common/src/integrationTest/java/com/linkedin/venice/endToEnd/TestGlobalDiv.java
Show resolved
Hide resolved
.../venice-test-common/src/integrationTest/java/com/linkedin/venice/endToEnd/TestGlobalDiv.java
Show resolved
Hide resolved
.../venice-test-common/src/integrationTest/java/com/linkedin/venice/endToEnd/TestGlobalDiv.java
Show resolved
Hide resolved
.../venice-test-common/src/integrationTest/java/com/linkedin/venice/endToEnd/TestGlobalDiv.java
Show resolved
Hide resolved
internal/venice-common/src/main/java/com/linkedin/venice/writer/VeniceWriter.java
Show resolved
Hide resolved
Continuing the PR in #1385. |
This change mainly focuses on adding chunking support for DIV messages when they are produced to Kafka topics, as the size of DIV message can be large. We leverage today's chunking mechanism for regular records and extend it to support DIV with the following modifications:
How was this PR tested?
Does this PR introduce any user-facing changes?