zachjsh commented on code in PR #14782:
URL: https://github.com/apache/druid/pull/14782#discussion_r1289534249
##########
server/src/main/java/org/apache/druid/server/coordinator/duty/KillUnusedSegments.java:
##########
@@ -112,69 +112,112 @@ public KillUnusedSegments(
@Override
public DruidCoordinatorRuntimeParams run(DruidCoordinatorRuntimeParams
params)
{
+
+ TaskStats taskStats = TaskStats.EMPTY;
Collection<String> dataSourcesToKill =
params.getCoordinatorDynamicConfig().getSpecificDataSourcesToKillUnusedSegmentsIn();
double killTaskSlotRatio =
params.getCoordinatorDynamicConfig().getKillTaskSlotRatio();
int maxKillTaskSlots =
params.getCoordinatorDynamicConfig().getMaxKillTaskSlots();
- int availableKillTaskSlots = getAvailableKillTaskSlots(killTaskSlotRatio,
maxKillTaskSlots);
- if (0 == availableKillTaskSlots) {
- log.debug("Not killing any unused segments because there are no
available kill task slots at this time.");
- return params;
- }
+ int killTaskCapacity = getKillTaskCapacity(
+ CoordinatorDutyUtils.getTotalWorkerCapacity(overlordClient),
+ killTaskSlotRatio,
+ maxKillTaskSlots
+ );
+ int availableKillTaskSlots = getAvailableKillTaskSlots(
+ killTaskCapacity,
+ CoordinatorDutyUtils.getNumActiveTaskSlots(overlordClient,
TASK_PREDICATE).size()
+ );
+ final CoordinatorRunStats stats = params.getCoordinatorStats();
- // If no datasource has been specified, all are eligible for killing
unused segments
- if (CollectionUtils.isNullOrEmpty(dataSourcesToKill)) {
- dataSourcesToKill = segmentsMetadataManager.retrieveAllDataSourceNames();
- }
+ taskStats.availableTaskSlots = availableKillTaskSlots;
+ taskStats.maxSlots = killTaskCapacity;
- final long currentTimeMillis = System.currentTimeMillis();
- if (CollectionUtils.isNullOrEmpty(dataSourcesToKill)) {
- log.debug("No eligible datasource to kill unused segments.");
- } else if (lastKillTime + period > currentTimeMillis) {
- log.debug("Skipping kill of unused segments as kill period has not
elapsed yet.");
- } else {
- log.debug("Killing unused segments in datasources: %s",
dataSourcesToKill);
- lastKillTime = currentTimeMillis;
- killUnusedSegments(dataSourcesToKill, availableKillTaskSlots);
+ if (0 < availableKillTaskSlots) {
+
+ // If no datasource has been specified, all are eligible for killing
unused segments
+ if (CollectionUtils.isNullOrEmpty(dataSourcesToKill)) {
+ dataSourcesToKill =
segmentsMetadataManager.retrieveAllDataSourceNames();
+ }
+
+ final long currentTimeMillis = System.currentTimeMillis();
+ if (CollectionUtils.isNullOrEmpty(dataSourcesToKill)) {
+ log.debug("No eligible datasource to kill unused segments.");
+ } else if (lastKillTime + period > currentTimeMillis) {
Review Comment:
fixed
##########
server/src/main/java/org/apache/druid/server/coordinator/duty/KillUnusedSegments.java:
##########
@@ -61,6 +58,9 @@ public class KillUnusedSegments implements CoordinatorDuty
{
public static final String KILL_TASK_TYPE = "kill";
public static final String TASK_ID_PREFIX = "coordinator-issued";
+ public static final Predicate<TaskStatusPlus> TASK_PREDICATE =
Review Comment:
fixed
##########
server/src/main/java/org/apache/druid/server/coordinator/duty/CompactSegments.java:
##########
@@ -152,9 +149,10 @@ public DruidCoordinatorRuntimeParams
run(DruidCoordinatorRuntimeParams params)
// Fetch currently running compaction tasks
int busyCompactionTaskSlots = 0;
- final CloseableIterator<TaskStatusPlus> activeTasks =
- FutureUtils.getUnchecked(overlordClient.taskStatuses(null, null, 0),
true);
- final List<TaskStatusPlus> compactionTasks =
filterNonCompactionTasks(activeTasks);
+ final List<TaskStatusPlus> compactionTasks =
CoordinatorDutyUtils.getNumActiveTaskSlots(
Review Comment:
thanks
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]