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

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

package com.hubspot.singularity.scheduler;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import com.google.common.base.Optional;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
import com.hubspot.singularity.MachineState;
import com.hubspot.singularity.SingularityKilledTaskIdRecord;
import com.hubspot.singularity.SingularityPendingTask;
import com.hubspot.singularity.SingularityRack;
import com.hubspot.singularity.SingularitySlave;
import com.hubspot.singularity.SingularityTaskId;
import com.hubspot.singularity.data.RackManager;
import com.hubspot.singularity.data.SlaveManager;
import com.hubspot.singularity.data.TaskManager;

public class SingularitySchedulerStateCache {

  private final TaskManager taskManager;

  private final SlaveManager slaveManager;
  private final RackManager rackManager;

  private final Map> slaveCache;
  private final Map> rackCache;

  private Optional> activeTaskIds;
  private Optional> scheduledTasks;
  private Optional> cleaningTasks;
  private Optional> killedTasks;
  private Optional numActiveRacks;
  private Optional numActiveSlaves;

  @Inject
  public SingularitySchedulerStateCache(TaskManager taskManager, SlaveManager slaveManager, RackManager rackManager) {
    this.taskManager = taskManager;
    this.slaveManager = slaveManager;
    this.rackManager = rackManager;

    activeTaskIds = Optional.absent();
    scheduledTasks = Optional.absent();
    cleaningTasks = Optional.absent();
    killedTasks = Optional.absent();
    numActiveRacks = Optional.absent();
    numActiveSlaves = Optional.absent();

    slaveCache = Maps.newHashMap();
    rackCache = Maps.newHashMap();
  }

  public Collection getActiveTaskIds() {
    if (!activeTaskIds.isPresent()) {
      activeTaskIds = getMutableCollection(taskManager.getActiveTaskIds());
    }

    return activeTaskIds.get();
  }

  public Collection getScheduledTasks() {
    if (!scheduledTasks.isPresent()) {
      scheduledTasks = getMutableCollection(taskManager.getPendingTasks());
    }

    return scheduledTasks.get();
  }

  private  Optional> getMutableCollection(List immutableList) {
    Collection mutableSet = Sets.newHashSet(immutableList);
    return Optional.of(mutableSet);
  }

  public Collection getCleaningTasks() {
    if (!cleaningTasks.isPresent()) {
      cleaningTasks = getMutableCollection(taskManager.getCleanupTaskIds());
    }

    return cleaningTasks.get();
  }

  public Collection getKilledTasks() {
    if (!killedTasks.isPresent()) {
      List killedTaskRecords = taskManager.getKilledTaskIdRecords();
      Collection taskIds = Sets.newHashSet();
      for (SingularityKilledTaskIdRecord record : killedTaskRecords) {
        taskIds.add(record.getTaskId());
      }
      killedTasks = Optional.of(taskIds);
    }
    return killedTasks.get();
  }

  public int getNumActiveRacks() {
    if (numActiveRacks.isPresent()) {
      return numActiveRacks.get();
    }

    numActiveRacks = Optional.of(rackManager.getNumObjectsAtState(MachineState.ACTIVE));

    return numActiveRacks.get();
  }

  public int getNumActiveSlaves() {
    if (numActiveSlaves.isPresent()) {
      return numActiveSlaves.get();
    }

    numActiveSlaves = Optional.of(slaveManager.getNumObjectsAtState(MachineState.ACTIVE));

    return numActiveSlaves.get();
  }

  public Optional getSlave(String slaveId) {
    if (!slaveCache.containsKey(slaveId)) {
      slaveCache.put(slaveId, slaveManager.getObject(slaveId));
    }

    return slaveCache.get(slaveId);
  }

  public Optional getRack(String rackId) {
    if (!rackCache.containsKey(rackId)) {
      rackCache.put(rackId, rackManager.getObject(rackId));
    }

    return rackCache.get(rackId);
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy