DBZ-7859: reduce enum array allocation
This commit is contained in:
parent
5f795fb497
commit
369d95aa0c
@ -454,6 +454,7 @@ Saulius Valatka
|
||||
Sayed Mohammad Hossein Torabi
|
||||
Scofield Xu
|
||||
Sara Fonseca
|
||||
Sean C. Sullivan
|
||||
Sean Rooney
|
||||
Sean Wu
|
||||
Sebastiaan Knijnenburg
|
||||
|
@ -8,7 +8,10 @@
|
||||
import java.time.Instant;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.apache.kafka.connect.data.Field;
|
||||
import org.apache.kafka.connect.data.Schema;
|
||||
@ -32,6 +35,7 @@ public final class Envelope {
|
||||
* The constants for the values for the {@link FieldName#OPERATION operation} field in the message envelope.
|
||||
*/
|
||||
public enum Operation {
|
||||
|
||||
/**
|
||||
* The operation that read the current state of a record, most typically during snapshots.
|
||||
*/
|
||||
@ -57,6 +61,11 @@ public enum Operation {
|
||||
*/
|
||||
MESSAGE("m");
|
||||
|
||||
// Enum .values() returns a new array upon each invocation
|
||||
// Reference: https://www.gamlor.info/wordpress/2017/08/javas-enum-values-hidden-allocations/
|
||||
private static final Map<String, Operation> CODE_LOOKUP = Stream.of(Operation.values()).collect(
|
||||
Collectors.toMap(Operation::code, op -> op));
|
||||
|
||||
private final String code;
|
||||
|
||||
Operation(String code) {
|
||||
@ -64,12 +73,10 @@ public enum Operation {
|
||||
}
|
||||
|
||||
public static Operation forCode(String code) {
|
||||
for (Operation op : Operation.values()) {
|
||||
if (op.code().equalsIgnoreCase(code)) {
|
||||
return op;
|
||||
}
|
||||
if (code == null) {
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
return CODE_LOOKUP.get(code.toLowerCase());
|
||||
}
|
||||
|
||||
public String code() {
|
||||
|
@ -57,6 +57,18 @@ public void shouldBuildWithCustomTransactionSchema() {
|
||||
assertRequiredField(env, Envelope.FieldName.TRANSACTION, SchemaBuilder.STRING_SCHEMA);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void envelopeOperationLookupByCode() {
|
||||
assertThat(Envelope.Operation.forCode(null)).isNull();
|
||||
assertThat(Envelope.Operation.forCode("")).isNull();
|
||||
assertThat(Envelope.Operation.forCode("bogus")).isNull();
|
||||
for (Envelope.Operation operation : Envelope.Operation.values()) {
|
||||
assertThat(Envelope.Operation.forCode(operation.code().toLowerCase())).isEqualTo(operation);
|
||||
assertThat(Envelope.Operation.forCode(operation.code().toUpperCase())).isEqualTo(operation);
|
||||
assertThat(Envelope.Operation.forCode(operation.name())).isNull();
|
||||
}
|
||||
}
|
||||
|
||||
protected void assertRequiredField(Envelope env, String fieldName, Schema expectedSchema) {
|
||||
assertField(env.schema().field(fieldName), fieldName, expectedSchema, false);
|
||||
}
|
||||
|
@ -265,3 +265,4 @@ zeldanerd24,Kevin Rothenberger
|
||||
PradeepNain,Pradeep Nain
|
||||
DLT1412,Duc Le Tu
|
||||
gaurav7261,Gaurav Miglani
|
||||
sullis,Sean C. Sullivan
|
||||
|
Loading…
Reference in New Issue
Block a user