com.hubspot.singularity.data.history.SingularityRequestHistoryPersister Maven / Gradle / Ivy
package com.hubspot.singularity.data.history;
import java.util.List;
import java.util.Set;
import javax.inject.Singleton;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
import com.hubspot.mesos.JavaUtils;
import com.hubspot.singularity.SingularityRequestHistory;
import com.hubspot.singularity.data.RequestManager;
@Singleton
public class SingularityRequestHistoryPersister {
private static final Logger LOG = LoggerFactory.getLogger(SingularityRequestHistoryPersister.class);
private final RequestManager requestManager;
private final HistoryManager historyManager;
@Inject
public SingularityRequestHistoryPersister(RequestManager requestManager, HistoryManager historyManager) {
this.requestManager = requestManager;
this.historyManager = historyManager;
}
public void checkRequestHistory() {
LOG.info("Checking request history for persistence");
final long start = System.currentTimeMillis();
final List requestIdsWithHistory = requestManager.getRequestIdsWithHistory();
final Set requestIds = Sets.newHashSet(requestManager.getAllRequestIds());
int numHistoryTransferred = 0;
for (String requestId : requestIdsWithHistory) {
List historyForRequestId = requestManager.getRequestHistory(requestId);
if (transferToHistoryDB(requestId, historyForRequestId)) {
numHistoryTransferred += historyForRequestId.size();
}
if (!requestIds.contains(requestId)) {
LOG.debug("Deleting request history parent for {} because it wasn't in active request ids", requestId);
requestManager.deleteHistoryParent(requestId);
}
}
LOG.info("Transferred {} history updates for {} requests in {}", numHistoryTransferred, requestIdsWithHistory.size(), JavaUtils.duration(start));
}
private boolean transferToHistoryDB(String requestId, List historyForRequestId) {
final long start = System.currentTimeMillis();
for (SingularityRequestHistory requestHistory : historyForRequestId) {
try {
historyManager.saveRequestHistoryUpdate(requestHistory);
} catch (Throwable t) {
LOG.warn("Failed to persist {} into History", requestHistory, t);
return false;
}
requestManager.deleteHistoryItem(requestHistory);
}
LOG.debug("Moved request history for {} ({} items) from ZK to History in {}", requestId, historyForRequestId.size(), JavaUtils.duration(start));
return true;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy