All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hubspot.singularity.scheduler.SingularityUsageCleanerPoller Maven / Gradle / Ivy

package com.hubspot.singularity.scheduler;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.inject.Inject;
import com.hubspot.singularity.SingularityDeleteResult;
import com.hubspot.singularity.config.SingularityConfiguration;
import com.hubspot.singularity.data.TaskManager;
import com.hubspot.singularity.data.UsageManager;

public class SingularityUsageCleanerPoller extends SingularityLeaderOnlyPoller {

  private static final Logger LOG = LoggerFactory.getLogger(SingularityUsageCleanerPoller.class);

  private final SingularityUsageHelper usageHelper;
  private final UsageManager usageManager;
  private final TaskManager taskManager;

  @Inject
  SingularityUsageCleanerPoller(SingularityConfiguration configuration, SingularityUsageHelper usageHelper, UsageManager usageManager, TaskManager taskManager) {
    super(configuration.getCleanUsageEveryMillis(), TimeUnit.MILLISECONDS);

    this.usageHelper = usageHelper;
    this.usageManager = usageManager;
    this.taskManager = taskManager;
  }

  @Override
  public void runActionOnPoll() {
    deleteObsoleteSlaveUsage();
    deleteObsoleteTaskUsage();
  }

  private void deleteObsoleteSlaveUsage() {
    Set slaveIdsToTrackUsageFor = usageHelper.getSlaveIdsToTrackUsageFor();

    for (String slaveIdWithUsage : usageManager.getSlavesWithUsage()) {
      if (slaveIdsToTrackUsageFor.contains(slaveIdWithUsage)) {
        continue;
      }

      SingularityDeleteResult result = usageManager.deleteSlaveUsage(slaveIdWithUsage);

      LOG.debug("Deleted obsolete slave usage {} - {}", slaveIdWithUsage, result);
    }
  }

  private void deleteObsoleteTaskUsage() {
    Set taskIds = new HashSet<>(taskManager.getActiveTaskIdsAsStrings());
    List taskIdsWithUsage = usageManager.getTasksWithUsage();

    for (String taskIdWithUsage : taskIdsWithUsage) {
      if (taskIds.contains(taskIdWithUsage)) {
        continue;
      }

      SingularityDeleteResult result = usageManager.deleteTaskUsage(taskIdWithUsage);

      LOG.debug("Deleted obsolete task usage {} - {}", taskIdWithUsage, result);
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy