Skip to content

Commit cc5f49a

Browse files
committed
Update to airlift 407 and cleanup JsonCodec usage
- Use factory builder methods to configure ObjectMapper - Use already defined serializers instead of copying them - Inject JsonCodec<IrJsonPath> into JsonPath2016Type
1 parent 0d3b264 commit cc5f49a

File tree

55 files changed

+370
-439
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+370
-439
lines changed

client/trino-client/src/test/java/io/trino/client/TestClientTypeSignature.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import com.google.common.collect.ImmutableList;
1717
import io.airlift.json.JsonCodec;
1818
import io.airlift.json.JsonCodecFactory;
19-
import io.airlift.json.ObjectMapperProvider;
2019
import io.trino.spi.type.StandardTypes;
2120
import org.junit.jupiter.api.Test;
2221

@@ -29,9 +28,7 @@ public class TestClientTypeSignature
2928
public static final JsonCodec<ClientTypeSignature> CLIENT_TYPE_SIGNATURE_CODEC;
3029

3130
static {
32-
ObjectMapperProvider provider = new ObjectMapperProvider();
33-
JsonCodecFactory codecFactory = new JsonCodecFactory(provider);
34-
CLIENT_TYPE_SIGNATURE_CODEC = codecFactory.jsonCodec(ClientTypeSignature.class);
31+
CLIENT_TYPE_SIGNATURE_CODEC = new JsonCodecFactory().jsonCodec(ClientTypeSignature.class);
3532
}
3633

3734
@Test

client/trino-jdbc/src/test/java/io/trino/jdbc/TestProgressMonitor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@
5656
public class TestProgressMonitor
5757
{
5858
private static final JsonCodec<QueryResults> QUERY_RESULTS_CODEC = new JsonCodecFactory(new ObjectMapperProvider()
59-
.withModules(ImmutableSet.of(new ServerQueryDataJacksonModule())))
59+
.withModules(ImmutableSet.of(new ServerQueryDataJacksonModule()))
60+
.get())
6061
.jsonCodec(QueryResults.class);
6162

6263
@StartStop

core/trino-main/src/main/java/io/trino/server/ServerMainModule.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import io.airlift.configuration.AbstractConfigurationAwareModule;
2525
import io.airlift.http.server.HttpServerConfig;
2626
import io.airlift.http.server.HttpServerInfo;
27+
import io.airlift.json.JsonCodec;
2728
import io.airlift.node.NodeInfo;
2829
import io.airlift.slice.Slice;
2930
import io.airlift.stats.GcMonitor;
@@ -55,6 +56,7 @@
5556
import io.trino.execution.executor.timesharing.MultilevelSplitQueue;
5657
import io.trino.execution.executor.timesharing.TimeSharingTaskExecutor;
5758
import io.trino.execution.scheduler.NodeSchedulerConfig;
59+
import io.trino.json.ir.IrJsonPath;
5860
import io.trino.memory.LocalMemoryManager;
5961
import io.trino.memory.LocalMemoryManagerExporter;
6062
import io.trino.memory.MemoryInfo;
@@ -395,6 +397,7 @@ protected void setup(Binder binder)
395397
binder.bind(TypeRegistry.class).in(Scopes.SINGLETON);
396398
binder.bind(TypeManager.class).to(InternalTypeManager.class).in(Scopes.SINGLETON);
397399
newSetBinder(binder, Type.class);
400+
jsonCodecBinder(binder).bindJsonCodec(IrJsonPath.class);
398401
binder.bind(RegisterJsonPath2016Type.class).asEagerSingleton();
399402

400403
// split manager
@@ -532,9 +535,9 @@ public static FunctionBundle jsonFunctionBundle(FunctionManager functionManager,
532535
private static class RegisterJsonPath2016Type
533536
{
534537
@Inject
535-
public RegisterJsonPath2016Type(BlockEncodingSerde blockEncodingSerde, TypeManager typeManager, TypeRegistry typeRegistry)
538+
public RegisterJsonPath2016Type(TypeRegistry typeRegistry, JsonCodec<IrJsonPath> jsonCodec)
536539
{
537-
typeRegistry.addType(new JsonPath2016Type(new TypeDeserializer(typeManager), blockEncodingSerde));
540+
typeRegistry.addType(new JsonPath2016Type(jsonCodec));
538541
}
539542
}
540543

core/trino-main/src/main/java/io/trino/server/ui/UiQueryResource.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -169,25 +169,24 @@ private Response failQuery(QueryId queryId, TrinoException queryException, HttpS
169169

170170
private JsonCodec<QueryInfo> buildQueryInfoCodec(ObjectMapper objectMapper, boolean pretty)
171171
{
172-
JsonCodecFactory jsonCodecFactory = new JsonCodecFactory(() -> {
173-
// Enable succinct DataSize serialization for QueryInfo to make it more human friendly
174-
ContextAttributes attrs = ContextAttributes.getEmpty();
175-
if (pretty) {
176-
attrs = attrs.withSharedAttribute(SUCCINCT_DATA_SIZE_ENABLED, Boolean.TRUE);
177-
}
172+
// Enable succinct DataSize serialization for QueryInfo to make it more human friendly
173+
ContextAttributes attrs = ContextAttributes.getEmpty();
174+
if (pretty) {
175+
attrs = attrs.withSharedAttribute(SUCCINCT_DATA_SIZE_ENABLED, Boolean.TRUE);
176+
}
177+
178+
ObjectMapper mapper = objectMapper
179+
.copy()
180+
.setDefaultAttributes(attrs);
181+
182+
// Don't serialize TDigestHistogram.digest which isn't useful and human readable
183+
mapper.configOverride(TDigestHistogram.class).setIgnorals(forIgnoredProperties(DIGEST_PROPERTY));
178184

179-
ObjectMapper mapper = objectMapper
180-
.copy()
181-
.setDefaultAttributes(attrs);
182-
// Don't serialize TDigestHistogram.digest which isn't useful and human readable
183-
mapper.configOverride(TDigestHistogram.class).setIgnorals(forIgnoredProperties(DIGEST_PROPERTY));
184-
185-
// Do not output @class property for metric types
186-
mapper.addMixIn(Metric.class, DropTypeInfo.class);
187-
// Do not output @type property for OperatorInfo
188-
mapper.addMixIn(OperatorInfo.class, DropTypeInfo.class);
189-
return mapper;
190-
});
185+
// Do not output @class property for metric types
186+
mapper.addMixIn(Metric.class, DropTypeInfo.class);
187+
// Do not output @type property for OperatorInfo
188+
mapper.addMixIn(OperatorInfo.class, DropTypeInfo.class);
189+
JsonCodecFactory jsonCodecFactory = new JsonCodecFactory(mapper);
191190

192191
if (pretty) {
193192
jsonCodecFactory = jsonCodecFactory.prettyPrint();

core/trino-main/src/main/java/io/trino/testing/PlanTester.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,23 @@
1313
*/
1414
package io.trino.testing;
1515

16+
import com.fasterxml.jackson.databind.ObjectMapper;
1617
import com.google.common.collect.ImmutableList;
1718
import com.google.common.collect.ImmutableMap;
1819
import com.google.common.collect.ImmutableSet;
1920
import com.google.common.io.Closer;
2021
import io.airlift.configuration.secrets.SecretsResolver;
22+
import io.airlift.json.JsonCodec;
23+
import io.airlift.json.JsonCodecFactory;
24+
import io.airlift.json.ObjectMapperProvider;
2125
import io.airlift.node.NodeInfo;
2226
import io.airlift.units.Duration;
2327
import io.opentelemetry.api.trace.Span;
2428
import io.opentelemetry.api.trace.Tracer;
2529
import io.trino.FeaturesConfig;
2630
import io.trino.Session;
2731
import io.trino.SystemSessionProperties;
32+
import io.trino.block.BlockJsonSerde;
2833
import io.trino.connector.CatalogFactory;
2934
import io.trino.connector.CatalogHandle;
3035
import io.trino.connector.CatalogServiceProviderModule;
@@ -77,6 +82,7 @@
7782
import io.trino.execution.scheduler.NodeSchedulerConfig;
7883
import io.trino.execution.scheduler.UniformNodeSelectorFactory;
7984
import io.trino.execution.warnings.WarningCollector;
85+
import io.trino.json.ir.IrJsonPath;
8086
import io.trino.memory.MemoryManagerConfig;
8187
import io.trino.memory.NodeMemoryConfig;
8288
import io.trino.metadata.AnalyzePropertyManager;
@@ -145,13 +151,15 @@
145151
import io.trino.spi.PageIndexerFactory;
146152
import io.trino.spi.PageSorter;
147153
import io.trino.spi.Plugin;
154+
import io.trino.spi.block.Block;
148155
import io.trino.spi.catalog.CatalogName;
149156
import io.trino.spi.connector.Connector;
150157
import io.trino.spi.connector.ConnectorFactory;
151158
import io.trino.spi.connector.ConnectorName;
152159
import io.trino.spi.type.Type;
153160
import io.trino.spi.type.TypeManager;
154161
import io.trino.spi.type.TypeOperators;
162+
import io.trino.spi.type.TypeSignature;
155163
import io.trino.spiller.GenericSpillerFactory;
156164
import io.trino.split.PageSinkManager;
157165
import io.trino.split.PageSourceManager;
@@ -209,6 +217,7 @@
209217
import io.trino.type.InternalTypeManager;
210218
import io.trino.type.JsonPath2016Type;
211219
import io.trino.type.TypeDeserializer;
220+
import io.trino.type.TypeSignatureDeserializer;
212221
import io.trino.util.FinalizerService;
213222
import org.intellij.lang.annotations.Language;
214223

@@ -388,7 +397,16 @@ private PlanTester(Session defaultSession, int nodeCountForStats)
388397
tableFunctionRegistry,
389398
typeManager,
390399
catalogManager);
391-
typeRegistry.addType(new JsonPath2016Type(new TypeDeserializer(typeManager), blockEncodingSerde));
400+
ObjectMapper mapper = new ObjectMapperProvider()
401+
.withJsonDeserializers(ImmutableMap.of(
402+
Type.class, new TypeDeserializer(typeManager),
403+
TypeSignature.class, new TypeSignatureDeserializer(),
404+
Block.class, new BlockJsonSerde.Deserializer(blockEncodingSerde)))
405+
.withJsonSerializers(ImmutableMap.of(
406+
Block.class, new BlockJsonSerde.Serializer(blockEncodingSerde)))
407+
.get();
408+
JsonCodec<IrJsonPath> irJsonPathJsonCodec = new JsonCodecFactory(mapper).jsonCodec(IrJsonPath.class);
409+
typeRegistry.addType(new JsonPath2016Type(irJsonPathJsonCodec));
392410
this.joinCompiler = new JoinCompiler(typeOperators);
393411
this.hashStrategyCompiler = new FlatHashStrategyCompiler(typeOperators, new NullSafeHashCompiler(typeOperators));
394412
PageIndexerFactory pageIndexerFactory = new GroupByHashPageIndexerFactory(hashStrategyCompiler);

core/trino-main/src/main/java/io/trino/type/JsonPath2016Type.java

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,18 @@
1313
*/
1414
package io.trino.type;
1515

16-
import com.google.common.collect.ImmutableMap;
1716
import io.airlift.json.JsonCodec;
18-
import io.airlift.json.JsonCodecFactory;
19-
import io.airlift.json.ObjectMapperProvider;
2017
import io.airlift.slice.Slice;
21-
import io.trino.block.BlockJsonSerde;
2218
import io.trino.json.ir.IrJsonPath;
23-
import io.trino.server.SliceSerialization;
2419
import io.trino.spi.block.Block;
2520
import io.trino.spi.block.BlockBuilder;
26-
import io.trino.spi.block.BlockEncodingSerde;
2721
import io.trino.spi.block.VariableWidthBlock;
2822
import io.trino.spi.block.VariableWidthBlockBuilder;
2923
import io.trino.spi.type.AbstractVariableWidthType;
30-
import io.trino.spi.type.Type;
3124
import io.trino.spi.type.TypeSignature;
3225

3326
import static io.airlift.slice.Slices.utf8Slice;
27+
import static java.util.Objects.requireNonNull;
3428

3529
public class JsonPath2016Type
3630
extends AbstractVariableWidthType
@@ -39,10 +33,10 @@ public class JsonPath2016Type
3933

4034
private final JsonCodec<IrJsonPath> jsonPathCodec;
4135

42-
public JsonPath2016Type(TypeDeserializer typeDeserializer, BlockEncodingSerde blockEncodingSerde)
36+
public JsonPath2016Type(JsonCodec<IrJsonPath> jsonPathCodec)
4337
{
4438
super(new TypeSignature(NAME), IrJsonPath.class);
45-
this.jsonPathCodec = getCodec(typeDeserializer, blockEncodingSerde);
39+
this.jsonPathCodec = requireNonNull(jsonPathCodec, "jsonPathCodec is null");
4640
}
4741

4842
@Override
@@ -82,16 +76,4 @@ public void writeObject(BlockBuilder blockBuilder, Object value)
8276
Slice bytes = utf8Slice(json);
8377
((VariableWidthBlockBuilder) blockBuilder).writeEntry(bytes);
8478
}
85-
86-
private static JsonCodec<IrJsonPath> getCodec(TypeDeserializer typeDeserializer, BlockEncodingSerde blockEncodingSerde)
87-
{
88-
ObjectMapperProvider provider = new ObjectMapperProvider();
89-
provider.setJsonSerializers(ImmutableMap.of(
90-
Block.class, new BlockJsonSerde.Serializer(blockEncodingSerde),
91-
Slice.class, new SliceSerialization.SliceSerializer()));
92-
provider.setJsonDeserializers(ImmutableMap.of(
93-
Type.class, typeDeserializer,
94-
Block.class, new BlockJsonSerde.Deserializer(blockEncodingSerde)));
95-
return new JsonCodecFactory(provider).jsonCodec(IrJsonPath.class);
96-
}
9779
}

core/trino-main/src/test/java/io/trino/exchange/TestExchangeSourceOutputSelector.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package io.trino.exchange;
1515

16+
import com.fasterxml.jackson.databind.ObjectMapper;
1617
import com.google.common.collect.ImmutableMap;
1718
import com.google.common.collect.ImmutableSet;
1819
import io.airlift.json.JsonCodec;
@@ -49,10 +50,11 @@ public class TestExchangeSourceOutputSelector
4950
@BeforeAll
5051
public void setup()
5152
{
52-
ObjectMapperProvider objectMapperProvider = new ObjectMapperProvider();
53-
objectMapperProvider.setJsonSerializers(ImmutableMap.of(Slice.class, new SliceSerializer()));
54-
objectMapperProvider.setJsonDeserializers(ImmutableMap.of(Slice.class, new SliceDeserializer()));
55-
codec = new JsonCodecFactory(objectMapperProvider).jsonCodec(ExchangeSourceOutputSelector.class);
53+
ObjectMapper objectMapper = new ObjectMapperProvider()
54+
.withJsonSerializers(ImmutableMap.of(Slice.class, new SliceSerializer()))
55+
.withJsonDeserializers(ImmutableMap.of(Slice.class, new SliceDeserializer()))
56+
.get();
57+
codec = new JsonCodecFactory(objectMapper).jsonCodec(ExchangeSourceOutputSelector.class);
5658
}
5759

5860
@AfterAll

core/trino-main/src/test/java/io/trino/execution/TestQueryInfo.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ Span.class, new SpanDeserializer(OpenTelemetry.noop()),
8080
TypeSignature.class, new TypeSignatureDeserializer()))
8181
.withKeyDeserializers(Map.of(
8282
TypeSignature.class, new TypeSignatureKeyDeserializer(),
83-
Symbol.class, new SymbolKeyDeserializer(TESTING_TYPE_MANAGER))))
83+
Symbol.class, new SymbolKeyDeserializer(TESTING_TYPE_MANAGER)))
84+
.get())
8485
.jsonCodec(QueryInfo.class);
8586

8687
QueryInfo expected = createQueryInfo(Optional.empty());

core/trino-main/src/test/java/io/trino/metadata/TestSignature.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package io.trino.metadata;
1515

16+
import com.fasterxml.jackson.databind.ObjectMapper;
1617
import com.google.common.collect.ImmutableMap;
1718
import io.airlift.json.JsonCodec;
1819
import io.airlift.json.JsonCodecFactory;
@@ -36,11 +37,12 @@ public class TestSignature
3637
@Test
3738
public void testSerializationRoundTrip()
3839
{
39-
ObjectMapperProvider objectMapperProvider = new ObjectMapperProvider();
40-
objectMapperProvider.setJsonDeserializers(ImmutableMap.of(
41-
Type.class, new TypeDeserializer(TESTING_TYPE_MANAGER),
42-
TypeSignature.class, new TypeSignatureDeserializer()));
43-
JsonCodec<Signature> codec = new JsonCodecFactory(objectMapperProvider, true).jsonCodec(Signature.class);
40+
ObjectMapper objectMapper = new ObjectMapperProvider()
41+
.withJsonDeserializers(ImmutableMap.of(
42+
Type.class, new TypeDeserializer(TESTING_TYPE_MANAGER),
43+
TypeSignature.class, new TypeSignatureDeserializer()))
44+
.get();
45+
JsonCodec<Signature> codec = new JsonCodecFactory(objectMapper).prettyPrint().jsonCodec(Signature.class);
4446

4547
Signature expected = Signature.builder()
4648
.returnType(BIGINT)

core/trino-main/src/test/java/io/trino/server/TestQueryResource.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package io.trino.server;
1515

16+
import com.fasterxml.jackson.databind.ObjectMapper;
1617
import com.google.inject.Key;
1718
import io.airlift.http.client.HttpClient;
1819
import io.airlift.http.client.HttpUriBuilder;
@@ -74,16 +75,16 @@
7475
@TestInstance(PER_METHOD)
7576
public class TestQueryResource
7677
{
77-
static final JsonCodec<List<BasicQueryInfo>> BASIC_QUERY_INFO_CODEC = new JsonCodecFactory(
78-
new ObjectMapperProvider()
79-
.withModules(Set.of(new QueryDataJacksonModule()))
80-
.withJsonSerializers(Map.of(Span.class, new SpanSerializer(OpenTelemetry.noop())))
81-
.withJsonDeserializers(Map.of(Span.class, new SpanDeserializer(OpenTelemetry.noop()))))
78+
static final ObjectMapper OBJECT_MAPPER = new ObjectMapperProvider()
79+
.withModules(Set.of(new QueryDataJacksonModule()))
80+
.withJsonSerializers(Map.of(Span.class, new SpanSerializer(OpenTelemetry.noop())))
81+
.withJsonDeserializers(Map.of(Span.class, new SpanDeserializer(OpenTelemetry.noop())))
82+
.get();
83+
84+
static final JsonCodec<List<BasicQueryInfo>> BASIC_QUERY_INFO_CODEC = new JsonCodecFactory(OBJECT_MAPPER)
8285
.listJsonCodec(BasicQueryInfo.class);
8386

84-
static final JsonCodec<QueryResults> QUERY_RESULTS_JSON_CODEC = new JsonCodecFactory(
85-
new ObjectMapperProvider()
86-
.withModules(Set.of(new QueryDataJacksonModule())))
87+
static final JsonCodec<QueryResults> QUERY_RESULTS_JSON_CODEC = new JsonCodecFactory(OBJECT_MAPPER)
8788
.jsonCodec(QueryResults.class);
8889

8990
private HttpClient client;

0 commit comments

Comments
 (0)