This is an automated email from the ASF dual-hosted git repository. Wei-hao-Li pushed a commit to branch deviceEntrySpill-dev in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit d6914dea463be7ed6dc364b33ee6fa56192d4e73 Author: Weihao Li <[email protected]> AuthorDate: Wed Aug 12 09:48:45 2026 +0800 modify Signed-off-by: Weihao Li <[email protected]> --- .../db/queryengine/common/MPPQueryContext.java | 32 ++++------ .../metadata/fetcher/TableDeviceSchemaFetcher.java | 74 ++++++++++------------ .../spill/AbstractDeviceEntryMaterializer.java | 4 +- .../metadata/spill/DeviceEntryDiskSpiller.java | 1 - .../metadata/spill/DeviceEntryIOContext.java | 19 +++--- .../metadata/spill/DeviceEntryMaterializer.java | 5 +- .../FragmentInstanceStatisticsDrawer.java | 16 ++--- .../FragmentInstanceStatisticsJsonDrawer.java | 11 ++-- .../statistics/QueryPlanStatistics.java | 41 ++++-------- .../FragmentInstanceStatisticsJsonDrawerTest.java | 14 ++-- 10 files changed, 94 insertions(+), 123 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java index f7ff41469ad..25edf3a4131 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java @@ -528,32 +528,28 @@ public class MPPQueryContext implements IAuditEntity { return queryPlanStatistics.getDispatchCost(); } - public void recordDeviceEntryDiskIO(long bytes, long timeCost) { - getOrCreateQueryPlanStatistics().recordDeviceEntryDiskIO(bytes, timeCost); + public void recordDeviceEntryDiskIODuringFetchSchema(long bytes, long timeCost) { + getOrCreateQueryPlanStatistics().recordDeviceEntryDiskIODuringFetchSchema(bytes, timeCost); } - public void recordDeviceEntrySegment() { - getOrCreateQueryPlanStatistics().recordDeviceEntrySegment(); + public void recordDeviceEntryCount(long count) { + getOrCreateQueryPlanStatistics().recordDeviceEntryCount(count); } - public void recordDeviceEntrySortedRun() { - getOrCreateQueryPlanStatistics().recordDeviceEntrySortedRun(); + public long getDiskIOSizeForDeviceEntryDuringFetchSchema() { + return queryPlanStatistics == null + ? 0 + : queryPlanStatistics.getDiskIOSizeForDeviceEntryDuringFetchSchema(); } - public long getDiskIOSizeForDeviceEntry() { - return queryPlanStatistics == null ? 0 : queryPlanStatistics.getDiskIOSizeForDeviceEntry(); + public long getDiskIOTimeCostForDeviceEntryDuringFetchSchema() { + return queryPlanStatistics == null + ? 0 + : queryPlanStatistics.getDiskIOTimeCostForDeviceEntryDuringFetchSchema(); } - public long getDiskIOTimeCostForDeviceEntry() { - return queryPlanStatistics == null ? 0 : queryPlanStatistics.getDiskIOTimeCostForDeviceEntry(); - } - - public long getDeviceEntrySegmentCount() { - return queryPlanStatistics == null ? 0 : queryPlanStatistics.getDeviceEntrySegmentCount(); - } - - public long getDeviceEntrySortedRunCount() { - return queryPlanStatistics == null ? 0 : queryPlanStatistics.getDeviceEntrySortedRunCount(); + public long getDeviceEntryCount() { + return queryPlanStatistics == null ? 0 : queryPlanStatistics.getDeviceEntryCount(); } private QueryPlanStatistics getOrCreateQueryPlanStatistics() { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java index 57f20ba6d45..1ac6e1789a4 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java @@ -245,14 +245,7 @@ public class TableDeviceSchemaFetcher { mayContainDuplicateDevice, false)) { fetchMissingDeviceSchemaForQuery( - database, - tableInstance, - attributeColumns, - statement, - deviceEntryMap, - null, - queryContext, - null); + database, tableInstance, attributeColumns, statement, deviceEntryMap, null, queryContext); } // TODO table metadata: implement deduplicate during schemaRegion execution @@ -278,8 +271,7 @@ public class TableDeviceSchemaFetcher { if (TreeViewSchema.isTreeViewTable(tableInstance)) { final Map<String, List<DeviceEntry>> deviceEntryMap = new HashMap<>(); final AtomicBoolean mayContainDuplicateDevice = new AtomicBoolean(false); - // pass by reference - final AtomicBoolean containsNonAlignedDevice = new AtomicBoolean(false); + boolean containsNonAlignedDevice = false; final ShowDevice statement = new ShowDevice(database, table); try (DeviceEntryMaterializer materializer = new DeviceEntryMaterializer( @@ -302,21 +294,21 @@ public class TableDeviceSchemaFetcher { for (DeviceEntry entry : entries) { appendToMaterializer(materializer, entry, queryContext, true); if (entry instanceof NonAlignedDeviceEntry) { - containsNonAlignedDevice.set(true); + containsNonAlignedDevice = true; } } entries.clear(); } if (needRemoteFetch) { - fetchMissingDeviceSchemaForQuery( - database, - tableInstance, - attributeColumns, - statement, - deviceEntryMap, - materializer, - queryContext, - containsNonAlignedDevice); + containsNonAlignedDevice |= + fetchMissingDeviceSchemaForQuery( + database, + tableInstance, + attributeColumns, + statement, + deviceEntryMap, + materializer, + queryContext); } if (deviceEntryMap.size() > 1) { throw new SemanticException( @@ -327,7 +319,7 @@ public class TableDeviceSchemaFetcher { final String resultDatabase = deviceEntryMap.isEmpty() ? null : deviceEntryMap.keySet().iterator().next(); return new DeviceEntryDataSetResult( - resultDatabase, materializer.finish(), containsNonAlignedDevice.get()); + resultDatabase, materializer.finish(), containsNonAlignedDevice); } catch (IOException e) { throw new UncheckedIOException(e); } @@ -357,8 +349,7 @@ public class TableDeviceSchemaFetcher { statement, cachedEntries, null, - queryContext, - null); + queryContext); } cachedEntries.put( database, new ArrayList<>(new LinkedHashSet<>(cachedEntries.get(database)))); @@ -383,8 +374,7 @@ public class TableDeviceSchemaFetcher { statement, cachedEntries, materializer, - queryContext, - null); + queryContext); } final DeviceEntryDataSet dataSet = materializer.finish(); return new DeviceEntryDataSetResult(database, dataSet, false); @@ -629,16 +619,16 @@ public class TableDeviceSchemaFetcher { return IDeviceID.Factory.DEFAULT_FACTORY.create(deviceIdNodes); } - private void fetchMissingDeviceSchemaForQuery( + private boolean fetchMissingDeviceSchemaForQuery( final String database, final TsTable tableInstance, final List<String> attributeColumns, final ShowDevice statement, final Map<String, List<DeviceEntry>> deviceEntryMap, final DeviceEntryMaterializer materializer, - final MPPQueryContext mppQueryContext, - final AtomicBoolean containsNonAlignedDevice) { + final MPPQueryContext mppQueryContext) { Throwable t = null; + boolean containsNonAlignedDevice = false; final long queryId = SessionManager.getInstance().requestQueryId(); // For the correctness of attribute remote update @@ -712,14 +702,14 @@ public class TableDeviceSchemaFetcher { deviceEntryMap.get(database), materializer); } else { - constructTreeResults( - tsBlock.get(), - columnHeaderList, - tableInstance, - mppQueryContext, - deviceEntryMap, - materializer, - containsNonAlignedDevice); + containsNonAlignedDevice |= + constructTreeResults( + tsBlock.get(), + columnHeaderList, + tableInstance, + mppQueryContext, + deviceEntryMap, + materializer); } } } else { @@ -732,6 +722,7 @@ public class TableDeviceSchemaFetcher { TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode()); } } + return containsNonAlignedDevice; } catch (final Throwable throwable) { t = throwable; throw throwable; @@ -803,14 +794,14 @@ public class TableDeviceSchemaFetcher { } } - private void constructTreeResults( + private boolean constructTreeResults( final TsBlock tsBlock, final List<ColumnHeader> columnHeaderList, final TsTable tableInstance, final MPPQueryContext mppQueryContext, final Map<String, List<DeviceEntry>> deviceEntryMap, - final DeviceEntryMaterializer materializer, - final AtomicBoolean containsNonAlignedDevice) { + final DeviceEntryMaterializer materializer) { + boolean containsNonAlignedDevice = false; final Column[] columns = tsBlock.getValueColumns(); for (int i = 0; i < tsBlock.getPositionCount(); i++) { final String[] nodes = new String[tableInstance.getTagNum()]; @@ -822,6 +813,7 @@ public class TableDeviceSchemaFetcher { columns[columns.length - 2].getBoolean(i) ? new AlignedDeviceEntry(deviceID, new Binary[0]) : new NonAlignedDeviceEntry(deviceID, new Binary[0]); + containsNonAlignedDevice |= deviceEntry instanceof NonAlignedDeviceEntry; final List<DeviceEntry> deviceEntries = deviceEntryMap.computeIfAbsent( columns[columns.length - 1].getBinary(i).getStringValue(TSFileConfig.STRING_CHARSET), @@ -831,11 +823,9 @@ public class TableDeviceSchemaFetcher { deviceEntries.add(deviceEntry); } else { appendToMaterializer(materializer, deviceEntry, mppQueryContext, false); - if (deviceEntry instanceof NonAlignedDeviceEntry) { - containsNonAlignedDevice.set(true); - } } } + return containsNonAlignedDevice; } private void constructNodesArrayAndAttributeMap( diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/AbstractDeviceEntryMaterializer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/AbstractDeviceEntryMaterializer.java index 6959387a4aa..a481423b3b7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/AbstractDeviceEntryMaterializer.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/AbstractDeviceEntryMaterializer.java @@ -97,8 +97,8 @@ public abstract class AbstractDeviceEntryMaterializer implements AutoCloseable { public abstract void forceSpill() throws IOException; - public final void setQueryContext(MPPQueryContext queryContext) { - ioContext = new DeviceEntryIOContext(queryContext); + protected final void setQueryContext(MPPQueryContext queryContext, boolean duringFetchSchema) { + ioContext = new DeviceEntryIOContext(queryContext, duringFetchSchema); } protected final DeviceEntryIOContext ioContext() { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryDiskSpiller.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryDiskSpiller.java index 50c3965dfee..53b8dda0632 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryDiskSpiller.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryDiskSpiller.java @@ -101,7 +101,6 @@ public final class DeviceEntryDiskSpiller implements AutoCloseable { sealedSegments.add(sealedFile); if (ioContext != null) { ioContext.recordDiskIO(0, startNanos); - ioContext.recordSegment(); } temporaryFile = null; currentBytes = 0; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryIOContext.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryIOContext.java index c434e0fece7..653cb91f0f3 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryIOContext.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryIOContext.java @@ -27,11 +27,13 @@ import java.util.concurrent.TimeUnit; public final class DeviceEntryIOContext { private final MPPQueryContext queryContext; + private final boolean duringFetchSchema; private final long timeoutStartNanos; private final long remainingTimeoutNanos; - public DeviceEntryIOContext(MPPQueryContext queryContext) { + public DeviceEntryIOContext(MPPQueryContext queryContext, boolean duringFetchSchema) { this.queryContext = queryContext; + this.duringFetchSchema = duringFetchSchema; this.timeoutStartNanos = System.nanoTime(); long elapsedMillis = Math.max(0, System.currentTimeMillis() - queryContext.getStartTime()); long remainingTimeoutMillis = Math.max(0, queryContext.getTimeOut() - elapsedMillis); @@ -46,15 +48,16 @@ public final class DeviceEntryIOContext { } public void recordDiskIO(long bytes, long startNanos) { - queryContext.recordDeviceEntryDiskIO(bytes, System.nanoTime() - startNanos); + long timeCost = System.nanoTime() - startNanos; + if (duringFetchSchema) { + queryContext.recordDeviceEntryDiskIODuringFetchSchema(bytes, timeCost); + } checkTimeout(); } - public void recordSegment() { - queryContext.recordDeviceEntrySegment(); - } - - public void recordSortedRun() { - queryContext.recordDeviceEntrySortedRun(); + public void recordDeviceEntryCount(long count) { + if (duringFetchSchema) { + queryContext.recordDeviceEntryCount(count); + } } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryMaterializer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryMaterializer.java index 92d7cf64d48..41308337953 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryMaterializer.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryMaterializer.java @@ -47,7 +47,7 @@ public final class DeviceEntryMaterializer extends AbstractDeviceEntryMaterializ boolean rawSegment, MPPQueryContext queryContext) { this(queryId, planNodeId, thresholdInBytes, rawSegment); - setQueryContext(queryContext); + setQueryContext(queryContext, rawSegment); } @Override @@ -97,6 +97,9 @@ public final class DeviceEntryMaterializer extends AbstractDeviceEntryMaterializ new SpilledDeviceEntryDataSet( queryId(), ownerDirectory(), spiller.finish(), entryCount(), !rawSegment); } + if (ioContext() != null) { + ioContext().recordDeviceEntryCount(entryCount()); + } markFinished(); return dataSet; } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsDrawer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsDrawer.java index da6f415af8d..7c4a45cfcac 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsDrawer.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsDrawer.java @@ -57,21 +57,15 @@ public class FragmentInstanceStatisticsDrawer { planHeader, 1, String.format( - "Disk IO Size for DeviceEntry: %d bytes", context.getDiskIOSizeForDeviceEntry())); + "Disk IO Size for DeviceEntry During FetchSchema: %d bytes", + context.getDiskIOSizeForDeviceEntryDuringFetchSchema())); addLine( planHeader, 1, String.format( - "Disk IO Time Cost for DeviceEntry: %.3f ms", - context.getDiskIOTimeCostForDeviceEntry() * NS_TO_MS_FACTOR)); - addLine( - planHeader, - 1, - String.format("DeviceEntry Segment Count: %d", context.getDeviceEntrySegmentCount())); - addLine( - planHeader, - 1, - String.format("DeviceEntry Sorted Run Count: %d", context.getDeviceEntrySortedRunCount())); + "Disk IO Time Cost for DeviceEntry During FetchSchema: %.3f ms", + context.getDiskIOTimeCostForDeviceEntryDuringFetchSchema() * NS_TO_MS_FACTOR)); + addLine(planHeader, 1, String.format("DeviceEntry Count: %d", context.getDeviceEntryCount())); addLine( planHeader, 0, diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawer.java index 9e727cd7517..ef887034dac 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawer.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawer.java @@ -55,12 +55,13 @@ public class FragmentInstanceStatisticsJsonDrawer { "fetchPartitionCostMs", formatMs(context.getFetchPartitionCost() * NS_TO_MS_FACTOR)); planStatistics.addProperty( "fetchSchemaCostMs", formatMs(context.getFetchSchemaCost() * NS_TO_MS_FACTOR)); - planStatistics.addProperty("diskIOSizeForDeviceEntry", context.getDiskIOSizeForDeviceEntry()); planStatistics.addProperty( - "diskIOTimeCostForDeviceEntryMs", - formatMs(context.getDiskIOTimeCostForDeviceEntry() * NS_TO_MS_FACTOR)); - planStatistics.addProperty("deviceEntrySegmentCount", context.getDeviceEntrySegmentCount()); - planStatistics.addProperty("deviceEntrySortedRunCount", context.getDeviceEntrySortedRunCount()); + "diskIOSizeForDeviceEntryDuringFetchSchema", + context.getDiskIOSizeForDeviceEntryDuringFetchSchema()); + planStatistics.addProperty( + "diskIOTimeCostForDeviceEntryDuringFetchSchemaMs", + formatMs(context.getDiskIOTimeCostForDeviceEntryDuringFetchSchema() * NS_TO_MS_FACTOR)); + planStatistics.addProperty("deviceEntryCount", context.getDeviceEntryCount()); planStatistics.addProperty( "logicalPlanCostMs", formatMs(context.getLogicalPlanCost() * NS_TO_MS_FACTOR)); planStatistics.addProperty( diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/QueryPlanStatistics.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/QueryPlanStatistics.java index 592d45d2e63..aa46addce37 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/QueryPlanStatistics.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/QueryPlanStatistics.java @@ -19,8 +19,6 @@ package org.apache.iotdb.db.queryengine.statistics; -import java.util.concurrent.atomic.AtomicLong; - public class QueryPlanStatistics { private long analyzeCost; private long fetchPartitionCost; @@ -29,12 +27,9 @@ public class QueryPlanStatistics { private long logicalOptimizationCost; private long distributionPlanCost; private long dispatchCost = 0; - // DeviceEntry materialization may involve multiple Region materializers. Use the same - // lock-free accumulation style as execution.fragment.QueryStatistics. - private final AtomicLong diskIOSizeForDeviceEntry = new AtomicLong(); - private final AtomicLong diskIOTimeCostForDeviceEntry = new AtomicLong(); - private final AtomicLong deviceEntrySegmentCount = new AtomicLong(); - private final AtomicLong deviceEntrySortedRunCount = new AtomicLong(); + private long diskIOSizeForDeviceEntryDuringFetchSchema; + private long diskIOTimeCostForDeviceEntryDuringFetchSchema; + private long deviceEntryCount; public void setAnalyzeCost(long analyzeCost) { this.analyzeCost = analyzeCost; @@ -92,32 +87,24 @@ public class QueryPlanStatistics { return dispatchCost; } - public void recordDeviceEntryDiskIO(long bytes, long timeCost) { - diskIOSizeForDeviceEntry.addAndGet(bytes); - diskIOTimeCostForDeviceEntry.addAndGet(timeCost); - } - - public void recordDeviceEntrySegment() { - deviceEntrySegmentCount.incrementAndGet(); - } - - public void recordDeviceEntrySortedRun() { - deviceEntrySortedRunCount.incrementAndGet(); + public void recordDeviceEntryDiskIODuringFetchSchema(long bytes, long timeCost) { + diskIOSizeForDeviceEntryDuringFetchSchema += bytes; + diskIOTimeCostForDeviceEntryDuringFetchSchema += timeCost; } - public long getDiskIOSizeForDeviceEntry() { - return diskIOSizeForDeviceEntry.get(); + public void recordDeviceEntryCount(long count) { + deviceEntryCount += count; } - public long getDiskIOTimeCostForDeviceEntry() { - return diskIOTimeCostForDeviceEntry.get(); + public long getDiskIOSizeForDeviceEntryDuringFetchSchema() { + return diskIOSizeForDeviceEntryDuringFetchSchema; } - public long getDeviceEntrySegmentCount() { - return deviceEntrySegmentCount.get(); + public long getDiskIOTimeCostForDeviceEntryDuringFetchSchema() { + return diskIOTimeCostForDeviceEntryDuringFetchSchema; } - public long getDeviceEntrySortedRunCount() { - return deviceEntrySortedRunCount.get(); + public long getDeviceEntryCount() { + return deviceEntryCount; } } diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawerTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawerTest.java index ae76d47b3fe..4dd52b45d71 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawerTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawerTest.java @@ -60,10 +60,8 @@ public class FragmentInstanceStatisticsJsonDrawerTest { context.setLogicalPlanCost(4000000L); // 4ms context.setLogicalOptimizationCost(5000000L); // 5ms context.setDistributionPlanCost(6000000L); // 6ms - context.recordDeviceEntryDiskIO(8192L, 7000000L); // 8 KiB, 7ms - context.recordDeviceEntrySegment(); - context.recordDeviceEntrySegment(); - context.recordDeviceEntrySortedRun(); + context.recordDeviceEntryDiskIODuringFetchSchema(8192L, 7000000L); // 8 KiB, 7ms + context.recordDeviceEntryCount(3); drawer.renderPlanStatistics(context); @@ -82,10 +80,10 @@ public class FragmentInstanceStatisticsJsonDrawerTest { assertEquals(4.0, planStats.get("logicalPlanCostMs").getAsDouble(), 0.01); assertEquals(5.0, planStats.get("logicalOptimizationCostMs").getAsDouble(), 0.01); assertEquals(6.0, planStats.get("distributionPlanCostMs").getAsDouble(), 0.01); - assertEquals(8192L, planStats.get("diskIOSizeForDeviceEntry").getAsLong()); - assertEquals(7.0, planStats.get("diskIOTimeCostForDeviceEntryMs").getAsDouble(), 0.01); - assertEquals(2L, planStats.get("deviceEntrySegmentCount").getAsLong()); - assertEquals(1L, planStats.get("deviceEntrySortedRunCount").getAsLong()); + assertEquals(8192L, planStats.get("diskIOSizeForDeviceEntryDuringFetchSchema").getAsLong()); + assertEquals( + 7.0, planStats.get("diskIOTimeCostForDeviceEntryDuringFetchSchemaMs").getAsDouble(), 0.01); + assertEquals(3L, planStats.get("deviceEntryCount").getAsLong()); } @Test
