Skip to content

Commit 6c36be4

Browse files
authored
Convert DateTime to long type along the critical path within coordinator (prestodb#24673)
* Change DateTime for APIs * Change DateTime for tests * Change DateTime for cpp workers * Change DateTime for presto-spark-base * Change DateTime for presto-ui * Change DateTime for presto-main
1 parent 3e05940 commit 6c36be4

File tree

74 files changed

+1292
-815
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+1292
-815
lines changed

presto-main/src/main/java/com/facebook/presto/connector/system/QuerySystemTable.java

+5-13
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import com.facebook.presto.spi.connector.ConnectorTransactionHandle;
3232
import com.facebook.presto.spi.resourceGroups.ResourceGroupId;
3333
import io.airlift.units.Duration;
34-
import org.joda.time.DateTime;
3534

3635
import javax.inject.Inject;
3736

@@ -44,6 +43,7 @@
4443
import static com.facebook.presto.common.type.VarcharType.createUnboundedVarcharType;
4544
import static com.facebook.presto.metadata.MetadataUtil.TableMetadataBuilder.tableMetadataBuilder;
4645
import static com.facebook.presto.spi.SystemTable.Distribution.ALL_COORDINATORS;
46+
import static com.facebook.presto.util.DateTimeUtils.toTimeStampInMillis;
4747
import static com.google.common.collect.ImmutableList.toImmutableList;
4848
import static io.airlift.slice.Slices.utf8Slice;
4949
import static java.util.Objects.requireNonNull;
@@ -119,10 +119,10 @@ public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, Connect
119119
toMillis(queryStats.getQueuedTime()),
120120
toMillis(queryStats.getAnalysisTime()),
121121

122-
toTimeStamp(queryStats.getCreateTime()),
123-
toTimeStamp(queryStats.getExecutionStartTime()),
124-
toTimeStamp(queryStats.getLastHeartbeat()),
125-
toTimeStamp(queryStats.getEndTime()));
122+
toTimeStampInMillis(queryStats.getCreateTime()),
123+
toTimeStampInMillis(queryStats.getExecutionStartTime()),
124+
toTimeStampInMillis(queryStats.getLastHeartbeat()),
125+
toTimeStampInMillis(queryStats.getEndTime()));
126126
}
127127
return table.build().cursor();
128128
}
@@ -145,12 +145,4 @@ private static Long toMillis(Duration duration)
145145
}
146146
return duration.toMillis();
147147
}
148-
149-
private static Long toTimeStamp(DateTime dateTime)
150-
{
151-
if (dateTime == null) {
152-
return null;
153-
}
154-
return dateTime.getMillis();
155-
}
156148
}

presto-main/src/main/java/com/facebook/presto/connector/system/TaskSystemTable.java

+4-13
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import com.facebook.presto.spi.connector.ConnectorTransactionHandle;
3030
import io.airlift.units.DataSize;
3131
import io.airlift.units.Duration;
32-
import org.joda.time.DateTime;
3332

3433
import javax.inject.Inject;
3534

@@ -138,10 +137,10 @@ public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, Connect
138137

139138
stats.getPhysicalWrittenDataSizeInBytes(),
140139

141-
toTimeStamp(stats.getCreateTime()),
142-
toTimeStamp(stats.getFirstStartTime()),
143-
toTimeStamp(taskInfo.getLastHeartbeat()),
144-
toTimeStamp(stats.getEndTime()));
140+
stats.getCreateTimeInMillis(),
141+
stats.getFirstStartTimeInMillis(),
142+
taskInfo.getLastHeartbeatInMillis(),
143+
stats.getEndTimeInMillis());
145144
}
146145
return table.build().cursor();
147146
}
@@ -161,12 +160,4 @@ private static Long toBytes(DataSize dataSize)
161160
}
162161
return dataSize.toBytes();
163162
}
164-
165-
private static Long toTimeStamp(DateTime dateTime)
166-
{
167-
if (dateTime == null) {
168-
return null;
169-
}
170-
return dateTime.getMillis();
171-
}
172163
}

presto-main/src/main/java/com/facebook/presto/connector/system/TransactionsSystemTable.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, Connect
9292
info.getIsolationLevel().toString(),
9393
info.isReadOnly(),
9494
info.isAutoCommitContext(),
95-
info.getCreateTime().getMillis(),
95+
info.getCreateTimeInMillis(),
9696
(long) info.getIdleTime().getValue(TimeUnit.SECONDS),
9797
info.getWrittenConnectorId().map(ConnectorId::getCatalogName).orElse(null),
9898
createStringsBlock(info.getConnectorIds()));

presto-main/src/main/java/com/facebook/presto/dispatcher/FailedDispatchQuery.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import com.facebook.presto.spi.resourceGroups.ResourceGroupQueryLimits;
2525
import com.google.common.util.concurrent.ListenableFuture;
2626
import io.airlift.units.Duration;
27-
import org.joda.time.DateTime;
2827

2928
import java.net.URI;
3029
import java.util.Optional;
@@ -146,27 +145,27 @@ public boolean isRetry()
146145
public void recordHeartbeat() {}
147146

148147
@Override
149-
public DateTime getLastHeartbeat()
148+
public long getLastHeartbeatInMillis()
150149
{
151-
return basicQueryInfo.getQueryStats().getEndTime();
150+
return basicQueryInfo.getQueryStats().getEndTimeInMillis();
152151
}
153152

154153
@Override
155-
public DateTime getCreateTime()
154+
public long getCreateTimeInMillis()
156155
{
157-
return basicQueryInfo.getQueryStats().getCreateTime();
156+
return basicQueryInfo.getQueryStats().getCreateTimeInMillis();
158157
}
159158

160159
@Override
161-
public Optional<DateTime> getExecutionStartTime()
160+
public long getExecutionStartTimeInMillis()
162161
{
163-
return getEndTime();
162+
return getEndTimeInMillis();
164163
}
165164

166165
@Override
167-
public Optional<DateTime> getEndTime()
166+
public long getEndTimeInMillis()
168167
{
169-
return Optional.ofNullable(basicQueryInfo.getQueryStats().getEndTime());
168+
return basicQueryInfo.getQueryStats().getEndTimeInMillis();
170169
}
171170

172171
@Override

presto-main/src/main/java/com/facebook/presto/dispatcher/LocalDispatchQuery.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import com.google.common.util.concurrent.ListenableFuture;
3636
import com.google.common.util.concurrent.SettableFuture;
3737
import io.airlift.units.Duration;
38-
import org.joda.time.DateTime;
3938

4039
import java.util.Optional;
4140
import java.util.concurrent.CompletableFuture;
@@ -230,9 +229,9 @@ public void recordHeartbeat()
230229
}
231230

232231
@Override
233-
public DateTime getLastHeartbeat()
232+
public long getLastHeartbeatInMillis()
234233
{
235-
return stateMachine.getLastHeartbeat();
234+
return stateMachine.getLastHeartbeatInMillis();
236235
}
237236

238237
@Override
@@ -275,21 +274,21 @@ public boolean isDone()
275274
}
276275

277276
@Override
278-
public DateTime getCreateTime()
277+
public long getCreateTimeInMillis()
279278
{
280-
return stateMachine.getCreateTime();
279+
return stateMachine.getCreateTimeInMillis();
281280
}
282281

283282
@Override
284-
public Optional<DateTime> getExecutionStartTime()
283+
public long getExecutionStartTimeInMillis()
285284
{
286-
return stateMachine.getExecutionStartTime();
285+
return stateMachine.getExecutionStartTimeInMillis();
287286
}
288287

289288
@Override
290-
public Optional<DateTime> getEndTime()
289+
public long getEndTimeInMillis()
291290
{
292-
return stateMachine.getEndTime();
291+
return stateMachine.getEndTimeInMillis();
293292
}
294293

295294
@Override

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

+29-30
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@
7474
import com.google.common.collect.ImmutableList;
7575
import com.google.common.collect.ImmutableMap;
7676
import com.google.common.collect.ImmutableSet;
77-
import org.joda.time.DateTime;
7877

7978
import javax.inject.Inject;
8079

@@ -662,11 +661,11 @@ private static void logQueryTimeline(QueryInfo queryInfo)
662661
{
663662
try {
664663
QueryStats queryStats = queryInfo.getQueryStats();
665-
DateTime queryStartTime = queryStats.getCreateTime();
666-
DateTime queryEndTime = queryStats.getEndTime();
664+
long queryStartTime = queryStats.getCreateTimeInMillis();
665+
long queryEndTime = queryStats.getEndTimeInMillis();
667666

668667
// query didn't finish cleanly
669-
if (queryStartTime == null || queryEndTime == null) {
668+
if (queryStartTime == 0 || queryEndTime == 0) {
670669
return;
671670
}
672671

@@ -675,9 +674,9 @@ private static void logQueryTimeline(QueryInfo queryInfo)
675674

676675
List<StageInfo> stages = getAllStages(queryInfo.getOutputStage());
677676
// long lastSchedulingCompletion = 0;
678-
long firstTaskStartTime = queryEndTime.getMillis();
679-
long lastTaskStartTime = queryStartTime.getMillis() + planning;
680-
long lastTaskEndTime = queryStartTime.getMillis() + planning;
677+
long firstTaskStartTime = queryEndTime;
678+
long lastTaskStartTime = queryStartTime + planning;
679+
long lastTaskEndTime = queryStartTime + planning;
681680
for (StageInfo stage : stages) {
682681
// only consider leaf stages
683682
if (!stage.getSubStages().isEmpty()) {
@@ -687,27 +686,27 @@ private static void logQueryTimeline(QueryInfo queryInfo)
687686
for (TaskInfo taskInfo : stage.getLatestAttemptExecutionInfo().getTasks()) {
688687
TaskStats taskStats = taskInfo.getStats();
689688

690-
DateTime firstStartTime = taskStats.getFirstStartTime();
691-
if (firstStartTime != null) {
692-
firstTaskStartTime = Math.min(firstStartTime.getMillis(), firstTaskStartTime);
689+
long firstStartTimeInMillis = taskStats.getFirstStartTimeInMillis();
690+
if (firstStartTimeInMillis != 0) {
691+
firstTaskStartTime = Math.min(firstStartTimeInMillis, firstTaskStartTime);
693692
}
694693

695-
DateTime lastStartTime = taskStats.getLastStartTime();
696-
if (lastStartTime != null) {
697-
lastTaskStartTime = max(lastStartTime.getMillis(), lastTaskStartTime);
694+
long lastStartTimeInMillis = taskStats.getLastStartTimeInMillis();
695+
if (lastStartTimeInMillis != 0) {
696+
lastTaskStartTime = max(lastStartTimeInMillis, lastTaskStartTime);
698697
}
699698

700-
DateTime endTime = taskStats.getEndTime();
701-
if (endTime != null) {
702-
lastTaskEndTime = max(endTime.getMillis(), lastTaskEndTime);
699+
long endTimeInMillis = taskStats.getEndTimeInMillis();
700+
if (endTimeInMillis != 0) {
701+
lastTaskEndTime = max(endTimeInMillis, lastTaskEndTime);
703702
}
704703
}
705704
}
706705

707-
long elapsed = max(queryEndTime.getMillis() - queryStartTime.getMillis(), 0);
708-
long scheduling = max(firstTaskStartTime - queryStartTime.getMillis() - planning, 0);
706+
long elapsed = max(queryEndTime - queryStartTime, 0);
707+
long scheduling = max(firstTaskStartTime - queryStartTime - planning, 0);
709708
long running = max(lastTaskEndTime - firstTaskStartTime, 0);
710-
long finishing = max(queryEndTime.getMillis() - lastTaskEndTime, 0);
709+
long finishing = max(queryEndTime - lastTaskEndTime, 0);
711710

712711
logQueryTimeline(
713712
queryInfo.getQueryId(),
@@ -727,15 +726,15 @@ private static void logQueryTimeline(QueryInfo queryInfo)
727726

728727
private static void logQueryTimeline(BasicQueryInfo queryInfo)
729728
{
730-
DateTime queryStartTime = queryInfo.getQueryStats().getCreateTime();
731-
DateTime queryEndTime = queryInfo.getQueryStats().getEndTime();
729+
long queryStartTimeInMillis = queryInfo.getQueryStats().getCreateTimeInMillis();
730+
long queryEndTimeInMillis = queryInfo.getQueryStats().getEndTimeInMillis();
732731

733732
// query didn't finish cleanly
734-
if (queryStartTime == null || queryEndTime == null) {
733+
if (queryStartTimeInMillis == 0 || queryEndTimeInMillis == 0) {
735734
return;
736735
}
737736

738-
long elapsed = max(queryEndTime.getMillis() - queryStartTime.getMillis(), 0);
737+
long elapsed = max(queryEndTimeInMillis - queryStartTimeInMillis, 0);
739738

740739
logQueryTimeline(
741740
queryInfo.getQueryId(),
@@ -745,8 +744,8 @@ private static void logQueryTimeline(BasicQueryInfo queryInfo)
745744
0,
746745
0,
747746
0,
748-
queryStartTime,
749-
queryEndTime);
747+
queryStartTimeInMillis,
748+
queryEndTimeInMillis);
750749
}
751750

752751
private static void logQueryTimeline(
@@ -757,19 +756,19 @@ private static void logQueryTimeline(
757756
long schedulingMillis,
758757
long runningMillis,
759758
long finishingMillis,
760-
DateTime queryStartTime,
761-
DateTime queryEndTime)
759+
long queryStartTimeInMillis,
760+
long queryEndTimeInMillis)
762761
{
763-
log.info("TIMELINE: Query %s :: Transaction:[%s] :: elapsed %sms :: planning %sms :: scheduling %sms :: running %sms :: finishing %sms :: begin %s :: end %s",
762+
log.info("TIMELINE: Query %s :: Transaction:[%s] :: elapsed %sms :: planning %sms :: scheduling %sms :: running %sms :: finishing %sms :: begin %sms :: end %sms",
764763
queryId,
765764
transactionId,
766765
elapsedMillis,
767766
planningMillis,
768767
schedulingMillis,
769768
runningMillis,
770769
finishingMillis,
771-
queryStartTime,
772-
queryEndTime);
770+
queryStartTimeInMillis,
771+
queryEndTimeInMillis);
773772
}
774773

775774
private static ResourceDistribution createResourceDistribution(

presto-main/src/main/java/com/facebook/presto/event/SplitMonitor.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.Optional;
3131

3232
import static java.time.Duration.ofMillis;
33+
import static java.time.Instant.ofEpochMilli;
3334
import static java.util.Objects.requireNonNull;
3435

3536
public class SplitMonitor
@@ -59,13 +60,13 @@ public void splitFailedEvent(TaskId taskId, DriverStats driverStats, Throwable c
5960
private void splitCompletedEvent(TaskId taskId, DriverStats driverStats, @Nullable String failureType, @Nullable String failureMessage)
6061
{
6162
Optional<Duration> timeToStart = Optional.empty();
62-
if (driverStats.getStartTime() != null) {
63-
timeToStart = Optional.of(ofMillis(driverStats.getStartTime().getMillis() - driverStats.getCreateTime().getMillis()));
63+
if (driverStats.getStartTimeInMillis() != 0) {
64+
timeToStart = Optional.of(ofMillis(driverStats.getStartTimeInMillis() - driverStats.getCreateTimeInMillis()));
6465
}
6566

6667
Optional<Duration> timeToEnd = Optional.empty();
67-
if (driverStats.getEndTime() != null) {
68-
timeToEnd = Optional.of(ofMillis(driverStats.getEndTime().getMillis() - driverStats.getCreateTime().getMillis()));
68+
if (driverStats.getEndTimeInMillis() != 0) {
69+
timeToEnd = Optional.of(ofMillis(driverStats.getEndTimeInMillis() - driverStats.getCreateTimeInMillis()));
6970
}
7071

7172
Optional<SplitFailureInfo> splitFailureMetadata = Optional.empty();
@@ -80,9 +81,9 @@ private void splitCompletedEvent(TaskId taskId, DriverStats driverStats, @Nullab
8081
taskId.getStageExecutionId().getStageId().toString(),
8182
taskId.getStageExecutionId().toString(),
8283
Integer.toString(taskId.getId()),
83-
driverStats.getCreateTime().toDate().toInstant(),
84-
Optional.ofNullable(driverStats.getStartTime()).map(startTime -> startTime.toDate().toInstant()),
85-
Optional.ofNullable(driverStats.getEndTime()).map(endTime -> endTime.toDate().toInstant()),
84+
ofEpochMilli(driverStats.getCreateTimeInMillis()),
85+
Optional.ofNullable(ofEpochMilli(driverStats.getStartTimeInMillis())),
86+
Optional.ofNullable(ofEpochMilli(driverStats.getEndTimeInMillis())),
8687
new SplitStatistics(
8788
ofMillis(driverStats.getTotalCpuTime().toMillis()),
8889
ofMillis(driverStats.getElapsedTime().toMillis()),

presto-main/src/main/java/com/facebook/presto/execution/AccessControlCheckerExecution.java

+8-9
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import com.google.common.util.concurrent.ListenableFuture;
3838
import com.google.inject.Inject;
3939
import io.airlift.units.Duration;
40-
import org.joda.time.DateTime;
4140

4241
import javax.annotation.Nullable;
4342

@@ -138,27 +137,27 @@ public long getTotalMemoryReservationInBytes()
138137
}
139138

140139
@Override
141-
public DateTime getCreateTime()
140+
public long getCreateTimeInMillis()
142141
{
143-
return stateMachine.getCreateTime();
142+
return stateMachine.getCreateTimeInMillis();
144143
}
145144

146145
@Override
147-
public Optional<DateTime> getExecutionStartTime()
146+
public long getExecutionStartTimeInMillis()
148147
{
149-
return stateMachine.getExecutionStartTime();
148+
return stateMachine.getExecutionStartTimeInMillis();
150149
}
151150

152151
@Override
153-
public DateTime getLastHeartbeat()
152+
public long getLastHeartbeatInMillis()
154153
{
155-
return stateMachine.getLastHeartbeat();
154+
return stateMachine.getLastHeartbeatInMillis();
156155
}
157156

158157
@Override
159-
public Optional<DateTime> getEndTime()
158+
public long getEndTimeInMillis()
160159
{
161-
return stateMachine.getEndTime();
160+
return stateMachine.getEndTimeInMillis();
162161
}
163162

164163
@Override

0 commit comments

Comments
 (0)