Skip to content

Commit 6f09c57

Browse files
NikhilCollooruarhimondr
authored andcommitted
Add support to disable task update size tracking
1 parent b190fe8 commit 6f09c57

File tree

4 files changed

+37
-11
lines changed

4 files changed

+37
-11
lines changed

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

+13
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public class TaskManagerConfig
5151
private boolean statisticsCpuTimerEnabled = true;
5252
private boolean perOperatorAllocationTrackingEnabled;
5353
private boolean taskAllocationTrackingEnabled;
54+
private boolean taskUpdateSizeTrackingEnabled = true;
5455
private DataSize maxPartialAggregationMemoryUsage = new DataSize(16, Unit.MEGABYTE);
5556
private DataSize maxLocalExchangeBufferSize = new DataSize(32, Unit.MEGABYTE);
5657
private DataSize maxIndexMemoryUsage = new DataSize(64, Unit.MEGABYTE);
@@ -666,4 +667,16 @@ public TaskManagerConfig setHighMemoryTaskKillerStrategy(HighMemoryTaskKillerStr
666667
this.highMemoryTaskKillerStrategy = highMemoryTaskKillerStrategy;
667668
return this;
668669
}
670+
671+
public boolean isTaskUpdateSizeTrackingEnabled()
672+
{
673+
return taskUpdateSizeTrackingEnabled;
674+
}
675+
676+
@Config("task.update-size-tracking-enabled")
677+
public TaskManagerConfig setTaskUpdateSizeTrackingEnabled(boolean taskUpdateSizeTrackingEnabled)
678+
{
679+
this.taskUpdateSizeTrackingEnabled = taskUpdateSizeTrackingEnabled;
680+
return this;
681+
}
669682
}

presto-main/src/main/java/com/facebook/presto/server/remotetask/HttpRemoteTask.java

+16-9
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ public final class HttpRemoteTask
227227
private final TableWriteInfo tableWriteInfo;
228228

229229
private final DecayCounter taskUpdateRequestSize;
230+
private final boolean taskUpdateSizeTrackingEnabled;
230231
private final SchedulerStatsTracker schedulerStatsTracker;
231232

232233
private final HttpRemoteTaskFactory.SafeEventLoop taskEventLoop;
@@ -263,6 +264,7 @@ public static HttpRemoteTask createHttpRemoteTask(
263264
MetadataManager metadataManager,
264265
QueryManager queryManager,
265266
DecayCounter taskUpdateRequestSize,
267+
boolean taskUpdateSizeTrackingEnabled,
266268
HandleResolver handleResolver,
267269
ConnectorTypeSerdeManager connectorTypeSerdeManager,
268270
SchedulerStatsTracker schedulerStatsTracker,
@@ -299,6 +301,7 @@ public static HttpRemoteTask createHttpRemoteTask(
299301
metadataManager,
300302
queryManager,
301303
taskUpdateRequestSize,
304+
taskUpdateSizeTrackingEnabled,
302305
handleResolver,
303306
connectorTypeSerdeManager,
304307
schedulerStatsTracker,
@@ -338,6 +341,7 @@ private HttpRemoteTask(Session session,
338341
MetadataManager metadataManager,
339342
QueryManager queryManager,
340343
DecayCounter taskUpdateRequestSize,
344+
boolean taskUpdateSizeTrackingEnabled,
341345
HandleResolver handleResolver,
342346
ConnectorTypeSerdeManager connectorTypeSerdeManager,
343347
SchedulerStatsTracker schedulerStatsTracker,
@@ -404,6 +408,7 @@ private HttpRemoteTask(Session session,
404408
.map(PlanNode::getId)
405409
.collect(toImmutableSet());
406410
this.taskUpdateRequestSize = taskUpdateRequestSize;
411+
this.taskUpdateSizeTrackingEnabled = taskUpdateSizeTrackingEnabled;
407412
this.schedulerStatsTracker = schedulerStatsTracker;
408413

409414
for (Entry<PlanNodeId, Split> entry : requireNonNull(initialSplits, "initialSplits is null").entries()) {
@@ -983,20 +988,22 @@ private void sendUpdate()
983988
byte[] taskUpdateRequestJson = taskUpdateRequestCodec.toBytes(updateRequest);
984989
schedulerStatsTracker.recordTaskUpdateSerializedCpuTime(THREAD_MX_BEAN.getCurrentThreadCpuTime() - serializeStartCpuTimeNanos);
985990

986-
taskUpdateRequestSize.add(taskUpdateRequestJson.length);
987-
988991
if (taskUpdateRequestJson.length > maxTaskUpdateSizeInBytes) {
989992
failTask(new PrestoException(EXCEEDED_TASK_UPDATE_SIZE_LIMIT, getExceededTaskUpdateSizeMessage(taskUpdateRequestJson)));
990993
return;
991994
}
992995

993-
if (fragment.isPresent()) {
994-
stats.updateWithPlanSize(taskUpdateRequestJson.length);
995-
}
996-
else {
997-
if (ThreadLocalRandom.current().nextDouble() < UPDATE_WITHOUT_PLAN_STATS_SAMPLE_RATE) {
998-
// This is to keep track of the task update size even when the plan fragment is NOT present
999-
stats.updateWithoutPlanSize(taskUpdateRequestJson.length);
996+
if (taskUpdateSizeTrackingEnabled) {
997+
taskUpdateRequestSize.add(taskUpdateRequestJson.length);
998+
999+
if (fragment.isPresent()) {
1000+
stats.updateWithPlanSize(taskUpdateRequestJson.length);
1001+
}
1002+
else {
1003+
if (ThreadLocalRandom.current().nextDouble() < UPDATE_WITHOUT_PLAN_STATS_SAMPLE_RATE) {
1004+
// This is to keep track of the task update size even when the plan fragment is NOT present
1005+
stats.updateWithoutPlanSize(taskUpdateRequestJson.length);
1006+
}
10001007
}
10011008
}
10021009

presto-main/src/main/java/com/facebook/presto/server/remotetask/HttpRemoteTaskFactory.java

+3
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ public class HttpRemoteTaskFactory
9494
private final MetadataManager metadataManager;
9595
private final QueryManager queryManager;
9696
private final DecayCounter taskUpdateRequestSize;
97+
private final boolean taskUpdateSizeTrackingEnabled;
9798
private final EventLoopGroup eventLoopGroup = new DefaultEventLoopGroup(Runtime.getRuntime().availableProcessors(),
9899
new ThreadFactoryBuilder().setNameFormat("task-event-loop-%s").setDaemon(true).build())
99100
{
@@ -180,6 +181,7 @@ else if (binaryTransportEnabled) {
180181
this.queryManager = queryManager;
181182

182183
this.taskUpdateRequestSize = new DecayCounter(ExponentialDecay.oneMinute());
184+
this.taskUpdateSizeTrackingEnabled = taskConfig.isTaskUpdateSizeTrackingEnabled();
183185
}
184186

185187
@Managed
@@ -239,6 +241,7 @@ public RemoteTask createRemoteTask(
239241
metadataManager,
240242
queryManager,
241243
taskUpdateRequestSize,
244+
taskUpdateSizeTrackingEnabled,
242245
handleResolver,
243246
connectorTypeSerdeManager,
244247
schedulerStatsTracker,

presto-main/src/test/java/com/facebook/presto/execution/TestTaskManagerConfig.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ public void testDefaults()
7777
.setHighMemoryTaskKillerStrategy(HighMemoryTaskKillerStrategy.FREE_MEMORY_ON_FULL_GC)
7878
.setHighMemoryTaskKillerGCReclaimMemoryThreshold(0.01)
7979
.setHighMemoryTaskKillerFrequentFullGCDurationThreshold(new Duration(1, SECONDS))
80-
.setHighMemoryTaskKillerHeapMemoryThreshold(0.9));
80+
.setHighMemoryTaskKillerHeapMemoryThreshold(0.9)
81+
.setTaskUpdateSizeTrackingEnabled(true));
8182
}
8283

8384
@Test
@@ -125,6 +126,7 @@ public void testExplicitPropertyMappings()
125126
.put("experimental.task.high-memory-task-killer-reclaim-memory-threshold", "0.8")
126127
.put("experimental.task.high-memory-task-killer-frequent-full-gc-duration-threshold", "2s")
127128
.put("experimental.task.high-memory-task-killer-heap-memory-threshold", "0.8")
129+
.put("task.update-size-tracking-enabled", "false")
128130
.build();
129131

130132
TaskManagerConfig expected = new TaskManagerConfig()
@@ -168,7 +170,8 @@ public void testExplicitPropertyMappings()
168170
.setHighMemoryTaskKillerStrategy(HighMemoryTaskKillerStrategy.FREE_MEMORY_ON_FREQUENT_FULL_GC)
169171
.setHighMemoryTaskKillerGCReclaimMemoryThreshold(0.8)
170172
.setHighMemoryTaskKillerFrequentFullGCDurationThreshold(new Duration(2, SECONDS))
171-
.setHighMemoryTaskKillerHeapMemoryThreshold(0.8);
173+
.setHighMemoryTaskKillerHeapMemoryThreshold(0.8)
174+
.setTaskUpdateSizeTrackingEnabled(false);
172175

173176
assertFullMapping(properties, expected);
174177
}

0 commit comments

Comments
 (0)