Skip to content

Commit 07f6c23

Browse files
committed
Fix physical input read time metric for text files
Time taken for reading small files was not included in the existing implementation
1 parent 048cf19 commit 07f6c23

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

plugin/trino-hive/src/main/java/io/trino/plugin/hive/line/LinePageSource.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,18 @@ public class LinePageSource
4141
private final LineDeserializer deserializer;
4242
private final LineBuffer lineBuffer;
4343
private final Location filePath;
44+
private final long smallFileReadTimeNanos;
4445

4546
private final PageBuilder pageBuilder;
4647
private long completedPositions;
4748

48-
public LinePageSource(LineReader lineReader, LineDeserializer deserializer, LineBuffer lineBuffer, Location filePath)
49+
public LinePageSource(LineReader lineReader, LineDeserializer deserializer, LineBuffer lineBuffer, Location filePath, long smallFileReadTimeNanos)
4950
{
5051
this.lineReader = requireNonNull(lineReader, "lineReader is null");
5152
this.deserializer = requireNonNull(deserializer, "deserializer is null");
5253
this.lineBuffer = requireNonNull(lineBuffer, "lineBuffer is null");
5354
this.filePath = requireNonNull(filePath, "filePath is null");
55+
this.smallFileReadTimeNanos = smallFileReadTimeNanos;
5456

5557
this.pageBuilder = new PageBuilder(deserializer.getTypes());
5658
}
@@ -105,7 +107,7 @@ public OptionalLong getCompletedPositions()
105107
@Override
106108
public long getReadTimeNanos()
107109
{
108-
return lineReader.getReadTimeNanos();
110+
return smallFileReadTimeNanos + lineReader.getReadTimeNanos();
109111
}
110112

111113
@Override

plugin/trino-hive/src/main/java/io/trino/plugin/hive/line/LinePageSourceFactory.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,12 @@ private ConnectorPageSource createPageSource(
132132
TrinoInputFile inputFile = trinoFileSystem.newInputFile(path);
133133
try {
134134
// buffer file if small
135+
long smallFileReadTimeNanos = 0;
135136
if (estimatedFileSize < SMALL_FILE_SIZE.toBytes()) {
137+
long readStart = System.nanoTime();
136138
try (InputStream inputStream = inputFile.newStream()) {
137139
byte[] data = inputStream.readAllBytes();
140+
smallFileReadTimeNanos = System.nanoTime() - readStart;
138141
inputFile = new MemoryInputFile(path, Slices.wrappedBuffer(data));
139142
}
140143
}
@@ -150,7 +153,7 @@ private ConnectorPageSource createPageSource(
150153
if (lineReader.isClosed()) {
151154
return new EmptyPageSource();
152155
}
153-
return new LinePageSource(lineReader, lineDeserializer, lineReaderFactory.createLineBuffer(), path);
156+
return new LinePageSource(lineReader, lineDeserializer, lineReaderFactory.createLineBuffer(), path, smallFileReadTimeNanos);
154157
}
155158
catch (TrinoException e) {
156159
throw e;

0 commit comments

Comments
 (0)