Skip to content

Commit d238477

Browse files
committed
fix: Info and infoUnion should always be synced
1 parent ed4f663 commit d238477

File tree

3 files changed

+26
-7
lines changed

3 files changed

+26
-7
lines changed

presto-main-base/src/main/java/com/facebook/presto/event/QueryMonitor.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
import com.facebook.presto.metadata.Metadata;
4242
import com.facebook.presto.metadata.SessionPropertyManager;
4343
import com.facebook.presto.operator.OperatorInfo;
44-
import com.facebook.presto.operator.OperatorStats;
44+
import com.facebook.presto.operator.OperatorInfoUnion;
4545
import com.facebook.presto.operator.TableFinishInfo;
4646
import com.facebook.presto.operator.TaskStats;
4747
import com.facebook.presto.server.BasicQueryInfo;
@@ -82,6 +82,7 @@
8282
import java.util.LinkedHashMap;
8383
import java.util.List;
8484
import java.util.Map;
85+
import java.util.Objects;
8586
import java.util.Optional;
8687
import java.util.stream.Collectors;
8788

@@ -601,10 +602,22 @@ private static QueryIOMetadata getQueryIOMetadata(QueryInfo queryInfo)
601602

602603
Optional<QueryOutputMetadata> output = Optional.empty();
603604
if (queryInfo.getOutput().isPresent()) {
605+
// Check both info (JSON) and infoUnion (Thrift) fields for TableFinishInfo
604606
Optional<TableFinishInfo> tableFinishInfo = queryInfo.getQueryStats().getOperatorSummaries().stream()
605-
.map(OperatorStats::getInfo)
606-
.filter(TableFinishInfo.class::isInstance)
607-
.map(TableFinishInfo.class::cast)
607+
.map(operatorStats -> {
608+
// First try the info field (JSON serialization)
609+
OperatorInfo info = operatorStats.getInfo();
610+
if (info instanceof TableFinishInfo) {
611+
return (TableFinishInfo) info;
612+
}
613+
// Fall back to infoUnion field (Thrift serialization)
614+
OperatorInfoUnion infoUnion = operatorStats.getInfoUnion();
615+
if (infoUnion != null) {
616+
return infoUnion.getTableFinishInfo();
617+
}
618+
return null;
619+
})
620+
.filter(Objects::nonNull)
608621
.findFirst();
609622

610623
Optional<List<OutputColumnMetadata>> outputColumnsMetadata = queryInfo.getOutput().get().getColumns()

presto-main-base/src/main/java/com/facebook/presto/operator/OperatorInfoUnion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ else if (infoUnion.getTableWriterMergeInfo() != null) {
257257
return infoUnion.getTableWriterMergeInfo();
258258
}
259259
else {
260-
throw new IllegalArgumentException("OperatorInfoUnion is of an unknown type: " + infoUnion.getClass().getName());
260+
return null;
261261
}
262262
}
263263
}

presto-main-base/src/main/java/com/facebook/presto/operator/OperatorStats.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ public OperatorStats(
243243
this.blockedReason = blockedReason;
244244

245245
this.info = info;
246-
this.infoUnion = null;
246+
this.infoUnion = (info != null) ? OperatorInfoUnion.convertToOperatorInfoUnion(info) : null;
247247
this.nullJoinBuildKeyCount = nullJoinBuildKeyCount;
248248
this.joinBuildKeyCount = joinBuildKeyCount;
249249
this.nullJoinProbeKeyCount = nullJoinProbeKeyCount;
@@ -390,7 +390,7 @@ public OperatorStats(
390390
this.blockedReason = blockedReason;
391391

392392
this.infoUnion = infoUnion;
393-
this.info = null;
393+
this.info = (infoUnion != null) ? OperatorInfoUnion.convertToOperatorInfo(infoUnion) : null;
394394
this.nullJoinBuildKeyCount = nullJoinBuildKeyCount;
395395
this.joinBuildKeyCount = joinBuildKeyCount;
396396
this.nullJoinProbeKeyCount = nullJoinProbeKeyCount;
@@ -668,13 +668,19 @@ public Optional<BlockedReason> getBlockedReason()
668668
@JsonProperty
669669
public OperatorInfo getInfo()
670670
{
671+
if (info == null && infoUnion != null) {
672+
return OperatorInfoUnion.convertToOperatorInfo(infoUnion);
673+
}
671674
return info;
672675
}
673676

674677
@Nullable
675678
@ThriftField(39)
676679
public OperatorInfoUnion getInfoUnion()
677680
{
681+
if (infoUnion == null && info != null) {
682+
return OperatorInfoUnion.convertToOperatorInfoUnion(info);
683+
}
678684
return infoUnion;
679685
}
680686

0 commit comments

Comments
 (0)