Skip to content
This repository was archived by the owner on Nov 14, 2024. It is now read-only.

Commit 557fdd0

Browse files
authored
Optimize InternalSchemaMetadataPayloadCodec serDe (#6739)
Optimize InternalSchemaMetadataPayloadCodec serDe
1 parent 3b85a8e commit 557fdd0

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

atlasdb-impl-shared/src/main/java/com/palantir/atlasdb/internalschema/persistence/InternalSchemaMetadataPayloadCodec.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,17 @@
1818

1919
import com.fasterxml.jackson.core.JsonProcessingException;
2020
import com.fasterxml.jackson.databind.ObjectMapper;
21+
import com.fasterxml.jackson.databind.ObjectReader;
22+
import com.fasterxml.jackson.databind.ObjectWriter;
2123
import com.google.common.collect.ImmutableMap;
2224
import com.palantir.atlasdb.internalschema.InternalSchemaMetadata;
2325
import com.palantir.conjure.java.serialization.ObjectMappers;
2426
import com.palantir.logsafe.SafeArg;
2527
import com.palantir.logsafe.exceptions.SafeIllegalStateException;
28+
import java.io.ByteArrayInputStream;
2629
import java.io.IOException;
30+
import java.io.StringReader;
31+
import java.nio.charset.StandardCharsets;
2732
import java.util.Optional;
2833
import java.util.function.Function;
2934

@@ -43,6 +48,8 @@ public final class InternalSchemaMetadataPayloadCodec {
4348
ImmutableMap.of(LATEST_VERSION, InternalSchemaMetadataPayloadCodec::decodeViaJson);
4449

4550
private static final ObjectMapper OBJECT_MAPPER = ObjectMappers.newServerObjectMapper();
51+
private static final ObjectReader SCHEMA_METADATA_READER = OBJECT_MAPPER.readerFor(InternalSchemaMetadata.class);
52+
private static final ObjectWriter SCHEMA_METADATA_WRITER = OBJECT_MAPPER.writerFor(InternalSchemaMetadata.class);
4653

4754
private InternalSchemaMetadataPayloadCodec() {
4855
// utility
@@ -85,7 +92,7 @@ static VersionedInternalSchemaMetadata encode(InternalSchemaMetadata internalSch
8592
try {
8693
return ImmutableVersionedInternalSchemaMetadata.builder()
8794
.version(LATEST_VERSION)
88-
.payload(OBJECT_MAPPER.writeValueAsBytes(internalSchemaMetadata))
95+
.payload(SCHEMA_METADATA_WRITER.writeValueAsBytes(internalSchemaMetadata))
8996
.build();
9097
} catch (JsonProcessingException e) {
9198
throw new RuntimeException(e);
@@ -94,7 +101,15 @@ static VersionedInternalSchemaMetadata encode(InternalSchemaMetadata internalSch
94101

95102
private static InternalSchemaMetadata decodeViaJson(byte[] byteArray) {
96103
try {
97-
return OBJECT_MAPPER.readValue(byteArray, InternalSchemaMetadata.class);
104+
if (byteArray.length <= 8192) {
105+
// Optimize to avoid allocation of heap ByteBuffer via InputStreamReader.
106+
// Remove after upgrade to Jackson 2.16.
107+
// see: https://github.com/FasterXML/jackson-core/pull/1081
108+
// and https://github.com/FasterXML/jackson-benchmarks/pull/9
109+
return SCHEMA_METADATA_READER.readValue(
110+
new StringReader(new String(byteArray, StandardCharsets.UTF_8)));
111+
}
112+
return SCHEMA_METADATA_READER.readValue(new ByteArrayInputStream(byteArray));
98113
} catch (IOException e) {
99114
throw new RuntimeException(e);
100115
}

0 commit comments

Comments
 (0)