diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6860315b42e0..082b7fcf926a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,7 +57,7 @@ jobs: matrix: java-version: - 17 - - 19 + - 20 timeout-minutes: 45 steps: - uses: actions/checkout@v3 @@ -566,7 +566,7 @@ jobs: - lib/trino-filesystem-s3 - lib/trino-hdfs - { modules: core/trino-main } - - { modules: core/trino-main, jdk: 19 } + - { modules: core/trino-main, jdk: 20 } - { modules: lib/trino-filesystem-s3, profile: cloud-tests } - { modules: plugin/trino-accumulo } - { modules: plugin/trino-bigquery } diff --git a/core/trino-main/src/main/java/io/trino/execution/TaskId.java b/core/trino-main/src/main/java/io/trino/execution/TaskId.java index eabd44db9733..938a647a7d2d 100644 --- a/core/trino-main/src/main/java/io/trino/execution/TaskId.java +++ b/core/trino-main/src/main/java/io/trino/execution/TaskId.java @@ -25,6 +25,7 @@ import static io.airlift.slice.SizeOf.instanceSize; import static io.trino.spi.QueryId.parseDottedId; import static java.lang.Integer.parseInt; +import static java.lang.String.join; import static java.util.Objects.requireNonNull; public class TaskId @@ -44,7 +45,11 @@ public TaskId(StageId stageId, int partitionId, int attemptId) requireNonNull(stageId, "stageId is null"); checkArgument(partitionId >= 0, "partitionId is negative: %s", partitionId); checkArgument(attemptId >= 0, "attemptId is negative: %s", attemptId); - this.fullId = stageId + "." + partitionId + "." + attemptId; + + // There is a strange JDK bug related to the CompactStrings implementation in JDK20+ which causes some fullId values + // to get corrupted when this particular line is JIT-optimized. Changing implicit concatenation to a String.join call + // seems to mitigate this issue. See: https://github.com/trinodb/trino/issues/18272 for more details. + this.fullId = join(".", stageId.toString(), String.valueOf(partitionId), String.valueOf(attemptId)); } private TaskId(String fullId)