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

com.hubspot.singularity.data.history.SingularityHistoryPersister Maven / Gradle / Ivy

package com.hubspot.singularity.data.history;

import io.dropwizard.lifecycle.Managed;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import javax.inject.Singleton;

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

import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.google.inject.Inject;
import com.hubspot.mesos.JavaUtils;
import com.hubspot.singularity.config.SingularityConfiguration;
import com.hubspot.singularity.sentry.SingularityExceptionNotifier;

@Singleton
public class SingularityHistoryPersister implements Managed {

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

  private final SingularityTaskHistoryPersister taskPersister;
  private final SingularityDeployHistoryPersister deployPersister;
  private final SingularityRequestHistoryPersister requestHistoryPersister;
  private final ScheduledExecutorService executorService;
  private final SingularityConfiguration configuration;
  private final SingularityExceptionNotifier exceptionNotifier;

  @Inject
  public SingularityHistoryPersister(SingularityExceptionNotifier exceptionNotifier, SingularityTaskHistoryPersister taskPersister, SingularityRequestHistoryPersister requestHistoryPersister, SingularityDeployHistoryPersister deployPersister, SingularityConfiguration configuration) {
    this.taskPersister = taskPersister;
    this.deployPersister = deployPersister;
    this.exceptionNotifier = exceptionNotifier;
    this.requestHistoryPersister = requestHistoryPersister;
    this.configuration = configuration;

    this.executorService = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder().setNameFormat("SingularityHistoryPersister-%d").build());
  }

  @Override
  public void stop() {
    MoreExecutors.shutdownAndAwaitTermination(executorService, 1, TimeUnit.SECONDS);
  }

  @Override
  public void start() {
    if (configuration.getPersistHistoryEverySeconds() < 1) {
      LOG.warn("Not persisting history because persistHistoryEverySeconds is set to {}", configuration.getPersistHistoryEverySeconds());
      return;
    }
    if (!configuration.getDatabaseConfiguration().isPresent()) {
      LOG.info("Not persisting history because no database configuration is present");
      return;
    }

    LOG.info("Starting a history persister with a {} delay", JavaUtils.durationFromMillis(TimeUnit.SECONDS.toMillis(configuration.getPersistHistoryEverySeconds())));

    executorService.scheduleWithFixedDelay(new Runnable() {

      @Override
      public void run() {
        try {
          taskPersister.checkInactiveTaskIds();
        } catch (Throwable t) {
          exceptionNotifier.notify(t);
          LOG.error("While persisting task history", t);
        }
        try {
          deployPersister.checkInactiveDeploys();
        } catch (Throwable t) {
          exceptionNotifier.notify(t);
          LOG.error("While persisting deploy history", t);
        }
        try {
          requestHistoryPersister.checkRequestHistory();
        } catch (Throwable t) {
          exceptionNotifier.notify(t);
          LOG.error("While persisting request history", t);
        }
      }
    }, configuration.getPersistHistoryEverySeconds(), configuration.getPersistHistoryEverySeconds(), TimeUnit.SECONDS);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy