Skip to content

Commit b11f358

Browse files
authored
Update plugin to generate idl thrift file automatically (#25164)
## Description 1. Automatically generate idl file for 3 classes, taskStatus, taskInfo, and taskUpdateRequest via plugin 2. Requires prestodb/drift#63 ## Motivation and Context <!---Why is this change required? What problem does it solve?--> <!---If it fixes an open issue, please link to the issue here.--> ## Impact <!---Describe any public API or user-facing feature change or any performance impact--> ## Test Plan 1. Build successfully and the generated idl file looks good. <img width="1174" alt="Screenshot 2025-05-20 at 16 16 07" src="https://github.com/user-attachments/assets/3d20b193-9aed-4635-a4f4-f45ccdde8538" /> <img width="1134" alt="Screenshot 2025-05-20 at 17 19 08" src="https://github.com/user-attachments/assets/5fe74591-5f7c-458e-bb25-4616b612ccf0" /> ## Contributor checklist - [ ] Please make sure your submission complies with our [contributing guide](https://github.com/prestodb/presto/blob/master/CONTRIBUTING.md), in particular [code style](https://github.com/prestodb/presto/blob/master/CONTRIBUTING.md#code-style) and [commit standards](https://github.com/prestodb/presto/blob/master/CONTRIBUTING.md#commit-standards). - [ ] PR description addresses the issue accurately and concisely. If the change is non-trivial, a GitHub Issue is referenced. - [ ] Documented new properties (with its default value), SQL syntax, functions, or other functionality. - [ ] If release notes are required, they follow the [release notes guidelines](https://github.com/prestodb/presto/wiki/Release-Notes-Guidelines). - [ ] Adequate tests were added if applicable. - [ ] CI passed. ## Release Notes Please follow [release notes guidelines](https://github.com/prestodb/presto/wiki/Release-Notes-Guidelines) and fill in the release notes below. ``` == NO RELEASE NOTE == ```
1 parent c1395ee commit b11f358

File tree

6 files changed

+48
-37
lines changed

6 files changed

+48
-37
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
<dep.okhttp.version>4.12.0</dep.okhttp.version>
5353
<dep.jdbi3.version>3.4.0</dep.jdbi3.version>
5454
<dep.oracle.version>19.3.0.0</dep.oracle.version>
55-
<dep.drift.version>1.40</dep.drift.version>
55+
<dep.drift.version>1.43</dep.drift.version>
5656
<!-- Changing joda version changes tzdata which must match deployed JVM tzdata
5757
Do not change this without also making sure it matches -->
5858
<dep.joda.version>2.12.7</dep.joda.version>

presto-main-base/src/main/java/com/facebook/presto/server/thrift/CustomCodecUtils.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import com.facebook.drift.TException;
1818
import com.facebook.drift.codec.metadata.DefaultThriftTypeReference;
1919
import com.facebook.drift.codec.metadata.FieldKind;
20-
import com.facebook.drift.codec.metadata.ThriftCatalog;
2120
import com.facebook.drift.codec.metadata.ThriftFieldExtractor;
2221
import com.facebook.drift.codec.metadata.ThriftFieldMetadata;
2322
import com.facebook.drift.codec.metadata.ThriftStructMetadata;
@@ -34,7 +33,6 @@
3433
import java.util.Optional;
3534

3635
import static com.facebook.drift.annotations.ThriftField.Requiredness.NONE;
37-
import static com.google.common.base.Preconditions.checkNotNull;
3836
import static java.lang.String.format;
3937

4038
/***
@@ -44,12 +42,8 @@ public class CustomCodecUtils
4442
{
4543
private CustomCodecUtils() {}
4644

47-
public static ThriftStructMetadata createSyntheticMetadata(ThriftCatalog thriftCatalog, short fieldId, String fieldName, Class<?> originalType, Class<?> referencedType)
45+
public static ThriftStructMetadata createSyntheticMetadata(short fieldId, String fieldName, Class<?> originalType, Class<?> referencedType, ThriftType thriftType)
4846
{
49-
checkNotNull(thriftCatalog.getThriftType(referencedType), "Can not find corresponding thrift type for type %s", referencedType);
50-
51-
ThriftType thriftType = thriftCatalog.getThriftType(referencedType);
52-
5347
ThriftFieldMetadata fieldMetaData = new ThriftFieldMetadata(
5448
fieldId,
5549
false, false, NONE, ImmutableMap.of(),

presto-main-base/src/main/java/com/facebook/presto/server/thrift/MetadataUpdatesCodec.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
package com.facebook.presto.server.thrift;
1515

1616
import com.facebook.airlift.json.JsonCodec;
17+
import com.facebook.drift.codec.CodecThriftType;
1718
import com.facebook.drift.codec.ThriftCodec;
1819
import com.facebook.drift.codec.metadata.ThriftCatalog;
19-
import com.facebook.drift.codec.metadata.ThriftStructMetadata;
2020
import com.facebook.drift.codec.metadata.ThriftType;
2121
import com.facebook.drift.protocol.TProtocolReader;
2222
import com.facebook.drift.protocol.TProtocolWriter;
@@ -35,26 +35,27 @@ public class MetadataUpdatesCodec
3535
private static final short METADATA_UPDATES_DATA_FIELD_ID = 1;
3636
private static final String METADATA_UPDATES_DATA_FIELD_NAME = "metadataUpdates";
3737
private static final String METADATA_UPDATES_STRUCT_NAME = "MetadataUpdates";
38+
private static final ThriftType SYNTHETIC_STRUCT_TYPE = ThriftType.struct(createSyntheticMetadata(METADATA_UPDATES_DATA_FIELD_ID, METADATA_UPDATES_DATA_FIELD_NAME, MetadataUpdates.class, String.class, ThriftType.STRING));
3839

39-
private final ThriftCatalog thriftCatalog;
40-
private final ThriftType syntheticStructType;
4140
private final JsonCodec<MetadataUpdates> jsonCodec;
4241

4342
@Inject
4443
public MetadataUpdatesCodec(JsonCodec<MetadataUpdates> jsonCodec, ThriftCatalog thriftCatalog)
4544
{
4645
this.jsonCodec = requireNonNull(jsonCodec, "jsonCodec is null");
47-
this.thriftCatalog = requireNonNull(thriftCatalog, "thriftCatalog is null");
48-
49-
ThriftStructMetadata structMetadata = createSyntheticMetadata(thriftCatalog, METADATA_UPDATES_DATA_FIELD_ID, METADATA_UPDATES_DATA_FIELD_NAME, MetadataUpdates.class, String.class);
50-
this.syntheticStructType = ThriftType.struct(structMetadata);
46+
thriftCatalog.addThriftType(SYNTHETIC_STRUCT_TYPE);
47+
}
5148

52-
thriftCatalog.addThriftType(syntheticStructType);
49+
@CodecThriftType
50+
public static ThriftType getThriftType()
51+
{
52+
return SYNTHETIC_STRUCT_TYPE;
5353
}
5454

55+
@Override
5556
public ThriftType getType()
5657
{
57-
return syntheticStructType;
58+
return SYNTHETIC_STRUCT_TYPE;
5859
}
5960

6061
@Override

presto-main-base/src/main/java/com/facebook/presto/server/thrift/SplitCodec.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
package com.facebook.presto.server.thrift;
1515

1616
import com.facebook.airlift.json.JsonCodec;
17+
import com.facebook.drift.codec.CodecThriftType;
1718
import com.facebook.drift.codec.ThriftCodec;
1819
import com.facebook.drift.codec.metadata.ThriftCatalog;
19-
import com.facebook.drift.codec.metadata.ThriftStructMetadata;
2020
import com.facebook.drift.codec.metadata.ThriftType;
2121
import com.facebook.drift.protocol.TProtocolReader;
2222
import com.facebook.drift.protocol.TProtocolWriter;
@@ -35,26 +35,27 @@ public class SplitCodec
3535
private static final short SPLIT_DATA_FIELD_ID = 1;
3636
private static final String SPLIT_DATA_FIELD_NAME = "split";
3737
private static final String SPLIT_DATA_STRUCT_NAME = "Split";
38+
private static final ThriftType SYNTHETIC_STRUCT_TYPE = ThriftType.struct(createSyntheticMetadata(SPLIT_DATA_FIELD_ID, SPLIT_DATA_FIELD_NAME, Split.class, String.class, ThriftType.STRING));
3839

39-
private final ThriftCatalog thriftCatalog;
40-
private final ThriftType syntheticStructType;
4140
private final JsonCodec<Split> jsonCodec;
4241

4342
@Inject
4443
public SplitCodec(JsonCodec<Split> jsonCodec, ThriftCatalog thriftCatalog)
4544
{
4645
this.jsonCodec = requireNonNull(jsonCodec, "jsonCodec is null");
47-
this.thriftCatalog = requireNonNull(thriftCatalog, "thriftCatalog is null");
48-
49-
ThriftStructMetadata structMetadata = createSyntheticMetadata(thriftCatalog, SPLIT_DATA_FIELD_ID, SPLIT_DATA_FIELD_NAME, Split.class, String.class);
50-
this.syntheticStructType = ThriftType.struct(structMetadata);
46+
thriftCatalog.addThriftType(SYNTHETIC_STRUCT_TYPE);
47+
}
5148

52-
thriftCatalog.addThriftType(syntheticStructType);
49+
@CodecThriftType
50+
public static ThriftType getThriftType()
51+
{
52+
return SYNTHETIC_STRUCT_TYPE;
5353
}
5454

55+
@Override
5556
public ThriftType getType()
5657
{
57-
return syntheticStructType;
58+
return SYNTHETIC_STRUCT_TYPE;
5859
}
5960

6061
@Override

presto-main-base/src/main/java/com/facebook/presto/server/thrift/TableWriteInfoCodec.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
package com.facebook.presto.server.thrift;
1515

1616
import com.facebook.airlift.json.JsonCodec;
17+
import com.facebook.drift.codec.CodecThriftType;
1718
import com.facebook.drift.codec.ThriftCodec;
1819
import com.facebook.drift.codec.metadata.ThriftCatalog;
19-
import com.facebook.drift.codec.metadata.ThriftStructMetadata;
2020
import com.facebook.drift.codec.metadata.ThriftType;
2121
import com.facebook.drift.protocol.TProtocolReader;
2222
import com.facebook.drift.protocol.TProtocolWriter;
@@ -35,26 +35,27 @@ public class TableWriteInfoCodec
3535
private static final short TABLE_WRITE_INFO_DATA_FIELD_ID = 1;
3636
private static final String TABLE_WRITE_INFO_DATA_FIELD_NAME = "tableWriteInfo";
3737
private static final String TABLE_WRITE_INFO_STRUCT_NAME = "TableWriteInfo";
38+
private static final ThriftType SYNTHETIC_STRUCT_TYPE = ThriftType.struct(createSyntheticMetadata(TABLE_WRITE_INFO_DATA_FIELD_ID, TABLE_WRITE_INFO_DATA_FIELD_NAME, TableWriteInfo.class, String.class, ThriftType.STRING));
3839

39-
private final ThriftCatalog thriftCatalog;
40-
private final ThriftType syntheticStructType;
4140
private final JsonCodec<TableWriteInfo> jsonCodec;
4241

4342
@Inject
4443
public TableWriteInfoCodec(JsonCodec<TableWriteInfo> jsonCodec, ThriftCatalog thriftCatalog)
4544
{
4645
this.jsonCodec = requireNonNull(jsonCodec, "jsonCodec is null");
47-
this.thriftCatalog = requireNonNull(thriftCatalog, "thriftCatalog is null");
48-
49-
ThriftStructMetadata structMetadata = createSyntheticMetadata(thriftCatalog, TABLE_WRITE_INFO_DATA_FIELD_ID, TABLE_WRITE_INFO_DATA_FIELD_NAME, TableWriteInfo.class, String.class);
50-
this.syntheticStructType = ThriftType.struct(structMetadata);
46+
thriftCatalog.addThriftType(SYNTHETIC_STRUCT_TYPE);
47+
}
5148

52-
thriftCatalog.addThriftType(syntheticStructType);
49+
@CodecThriftType
50+
public static ThriftType getThriftType()
51+
{
52+
return SYNTHETIC_STRUCT_TYPE;
5353
}
5454

55+
@Override
5556
public ThriftType getType()
5657
{
57-
return syntheticStructType;
58+
return SYNTHETIC_STRUCT_TYPE;
5859
}
5960

6061
@Override

presto-thrift-spec/pom.xml

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,23 @@
5050
<configuration>
5151
<classes>
5252
<class>com.facebook.presto.execution.TaskStatus</class>
53+
<class>com.facebook.presto.execution.TaskInfo</class>
54+
<class>com.facebook.presto.server.TaskUpdateRequest</class>
5355
</classes>
56+
<customCodecs>
57+
<codec>com.facebook.presto.server.thrift.SplitCodec</codec>
58+
<codec>com.facebook.presto.server.thrift.TableWriteInfoCodec</codec>
59+
<codec>com.facebook.presto.server.thrift.MetadataUpdatesCodec</codec>
60+
<codec>com.facebook.drift.codec.utils.DurationToMillisThriftCodec</codec>
61+
<codec>com.facebook.drift.codec.utils.DataSizeToBytesThriftCodec</codec>
62+
<codec>com.facebook.drift.codec.utils.JodaDateTimeToEpochMillisThriftCodec</codec>
63+
<codec>com.facebook.drift.codec.utils.LocaleToLanguageTagCodec</codec>
64+
<codec>com.facebook.drift.codec.internal.builtin.OptionalIntThriftCodec</codec>
65+
<codec>com.facebook.drift.codec.internal.builtin.OptionalLongThriftCodec</codec>
66+
<codec>com.facebook.drift.codec.internal.builtin.OptionalDoubleThriftCodec</codec>
67+
</customCodecs>
5468
<recursive>true</recursive>
55-
<outputFile>target/thrift/presto-internal-${project.version}.thrift</outputFile>
69+
<outputFile>target/thrift/presto-thrift-protocol.thrift</outputFile>
5670
</configuration>
5771
</execution>
5872
</executions>
@@ -70,7 +84,7 @@
7084
<configuration>
7185
<artifacts>
7286
<artifact>
73-
<file>target/thrift/presto-internal-${project.version}.thrift</file>
87+
<file>target/thrift/presto-thrift-protocol.thrift</file>
7488
<type>thrift</type>
7589
</artifact>
7690
</artifacts>

0 commit comments

Comments
 (0)