Skip to content

Commit

Permalink
less duplication
Browse files Browse the repository at this point in the history
  • Loading branch information
ssalinas committed Oct 23, 2017
1 parent f618f9d commit 0a2c91f
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 63 deletions.
@@ -1,7 +1,5 @@
package com.hubspot.singularity; package com.hubspot.singularity;


import java.util.List;

import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Optional; import com.google.common.base.Optional;
Expand All @@ -18,7 +16,7 @@ public static SingularityPendingRequestParent fromSingularityRequestParent(Singu
return new SingularityPendingRequestParent(singularityRequestParent.getRequest(), singularityRequestParent.getState(), singularityRequestParent.getRequestDeployState(), return new SingularityPendingRequestParent(singularityRequestParent.getRequest(), singularityRequestParent.getState(), singularityRequestParent.getRequestDeployState(),
singularityRequestParent.getActiveDeploy(), singularityRequestParent.getPendingDeploy(), singularityRequestParent.getPendingDeployState(), pendingRequest, singularityRequestParent.getActiveDeploy(), singularityRequestParent.getPendingDeploy(), singularityRequestParent.getPendingDeployState(), pendingRequest,
singularityRequestParent.getExpiringBounce(), singularityRequestParent.getExpiringPause(), singularityRequestParent.getExpiringScale(), singularityRequestParent.getExpiringBounce(), singularityRequestParent.getExpiringPause(), singularityRequestParent.getExpiringScale(),
singularityRequestParent.getExpiringSkipHealthchecks(), singularityRequestParent.getTaskIds(), singularityRequestParent.getRecentHistory()); singularityRequestParent.getExpiringSkipHealthchecks(), singularityRequestParent.getTaskIds(), singularityRequestParent.getLastHistory());
} }


@JsonCreator @JsonCreator
Expand All @@ -34,7 +32,7 @@ public SingularityPendingRequestParent(@JsonProperty("request") SingularityReque
@JsonProperty("expiringScale") Optional<SingularityExpiringScale> expiringScale, @JsonProperty("expiringScale") Optional<SingularityExpiringScale> expiringScale,
@JsonProperty("expiringSkipHealthchecks") Optional<SingularityExpiringSkipHealthchecks> expiringSkipHealthchecks, @JsonProperty("expiringSkipHealthchecks") Optional<SingularityExpiringSkipHealthchecks> expiringSkipHealthchecks,
@JsonProperty("taskIds") Optional<SingularityTaskIdsByStatus> taskIds, @JsonProperty("taskIds") Optional<SingularityTaskIdsByStatus> taskIds,
@JsonProperty("recentHistory") List<SingularityRequestHistory> recentHistory) { @JsonProperty("recentHistory") Optional<SingularityRequestHistory> recentHistory) {
super(request, state, requestDeployState, activeDeploy, pendingDeploy, pendingDeployState, expiringBounce, expiringPause, expiringScale, expiringSkipHealthchecks, taskIds, recentHistory); super(request, state, requestDeployState, activeDeploy, pendingDeploy, pendingDeployState, expiringBounce, expiringPause, expiringScale, expiringSkipHealthchecks, taskIds, recentHistory);
this.pendingRequest = pendingRequest; this.pendingRequest = pendingRequest;
} }
Expand Down
Expand Up @@ -176,8 +176,7 @@ public void updateRequest(SingularityRequest request, Optional<SingularityReques
public List<SingularityRequestParent> fillDataForRequestsAndFilter(List<SingularityRequestWithState> requests, public List<SingularityRequestParent> fillDataForRequestsAndFilter(List<SingularityRequestWithState> requests,
Optional<SingularityUser> user, Optional<SingularityUser> user,
Boolean filterRelevantForUser, Boolean filterRelevantForUser,
Boolean includeTaskIds, Boolean includeFullRequestData,
Boolean includeLastHistory,
Optional<Integer> limit) { Optional<Integer> limit) {
Map<String, Optional<SingularityRequestHistory>> requestIdToLastHistory = new HashMap<>(); Map<String, Optional<SingularityRequestHistory>> requestIdToLastHistory = new HashMap<>();
Map<String, Optional<SingularityRequestDeployState>> deployStates = new HashMap<>(); Map<String, Optional<SingularityRequestDeployState>> deployStates = new HashMap<>();
Expand All @@ -197,7 +196,7 @@ public List<SingularityRequestParent> fillDataForRequestsAndFilter(List<Singular
// The user is in the group for this request // The user is in the group for this request
return true; return true;
} }
if (includeLastHistory) { if (includeFullRequestData) {
Optional<SingularityRequestHistory> lastHistory = requestIdToLastHistory.computeIfAbsent(requestId, requestHistoryHelper::getLastHistory); Optional<SingularityRequestHistory> lastHistory = requestIdToLastHistory.computeIfAbsent(requestId, requestHistoryHelper::getLastHistory);
if (userModifiedRequestLast(lastHistory, user)) { if (userModifiedRequestLast(lastHistory, user)) {
return true; return true;
Expand All @@ -222,20 +221,18 @@ public List<SingularityRequestParent> fillDataForRequestsAndFilter(List<Singular
final List<SingularityRequestParent> parents = Lists.newArrayListWithCapacity(requestIds.size()); final List<SingularityRequestParent> parents = Lists.newArrayListWithCapacity(requestIds.size());


for (SingularityRequestWithState requestWithState : requests) { for (SingularityRequestWithState requestWithState : requests) {
Optional<SingularityRequestHistory> lastHistory = includeLastHistory ? requestIdToLastHistory.computeIfAbsent(requestWithState.getRequest().getId(), requestHistoryHelper::getLastHistory) : Optional.absent();
Optional<SingularityRequestDeployState> deployState = deployStates.computeIfAbsent(requestWithState.getRequest().getId(), deployManager::getRequestDeployState);
parents.add(new SingularityRequestParent( parents.add(new SingularityRequestParent(
requestWithState.getRequest(), requestWithState.getRequest(),
requestWithState.getState(), requestWithState.getState(),
deployState, deployStates.computeIfAbsent(requestWithState.getRequest().getId(), deployManager::getRequestDeployState),
Optional.absent(), // full activeDeploy data not provided Optional.absent(), // full activeDeploy data not provided
Optional.absent(), Optional.absent(), // full pendingDeploy data and state not provided Optional.absent(), Optional.absent(), // full pendingDeploy data and state not provided
requestManager.getExpiringBounce(requestWithState.getRequest().getId()), includeFullRequestData ? requestManager.getExpiringBounce(requestWithState.getRequest().getId()) : Optional.absent(),
requestManager.getExpiringPause(requestWithState.getRequest().getId()), includeFullRequestData ? requestManager.getExpiringPause(requestWithState.getRequest().getId()) : Optional.absent(),
requestManager.getExpiringScale(requestWithState.getRequest().getId()), includeFullRequestData ? requestManager.getExpiringScale(requestWithState.getRequest().getId()) : Optional.absent(),
requestManager.getExpiringSkipHealthchecks(requestWithState.getRequest().getId()), includeFullRequestData ? requestManager.getExpiringSkipHealthchecks(requestWithState.getRequest().getId()) : Optional.absent(),
includeTaskIds ? getTaskIdsByStatusForRequest(requestWithState.getRequest().getId()) : Optional.absent(), includeFullRequestData ? getTaskIdsByStatusForRequest(requestWithState) : Optional.absent(),
includeLastHistory ? requestIdToLastHistory.computeIfAbsent(requestWithState.getRequest().getId(), requestHistoryHelper::getLastHistory) : Optional.absent())); includeFullRequestData ? requestIdToLastHistory.computeIfAbsent(requestWithState.getRequest().getId(), requestHistoryHelper::getLastHistory) : Optional.absent()));
} }


return parents; return parents;
Expand All @@ -246,6 +243,12 @@ public Optional<SingularityTaskIdsByStatus> getTaskIdsByStatusForRequest(String
if (!requestWithState.isPresent()) { if (!requestWithState.isPresent()) {
return Optional.absent(); return Optional.absent();
} }

return getTaskIdsByStatusForRequest(requestWithState.get());
}

private Optional<SingularityTaskIdsByStatus> getTaskIdsByStatusForRequest(SingularityRequestWithState requestWithState) {
String requestId = requestWithState.getRequest().getId();
Optional<SingularityPendingDeploy> pendingDeploy = deployManager.getPendingDeploy(requestId); Optional<SingularityPendingDeploy> pendingDeploy = deployManager.getPendingDeploy(requestId);


List<SingularityTaskId> cleaningTaskIds = taskManager.getCleanupTaskIds().stream().filter((t) -> t.getRequestId().equals(requestId)).collect(Collectors.toList()); List<SingularityTaskId> cleaningTaskIds = taskManager.getCleanupTaskIds().stream().filter((t) -> t.getRequestId().equals(requestId)).collect(Collectors.toList());
Expand All @@ -259,7 +262,7 @@ public Optional<SingularityTaskIdsByStatus> getTaskIdsByStatusForRequest(String
for (Map.Entry<String, List<SingularityTaskId>> entry : taskIdsByDeployId.entrySet()) { for (Map.Entry<String, List<SingularityTaskId>> entry : taskIdsByDeployId.entrySet()) {
Optional<SingularityDeploy> deploy = deployManager.getDeploy(requestId, entry.getKey()); Optional<SingularityDeploy> deploy = deployManager.getDeploy(requestId, entry.getKey());
List<SingularityTaskId> healthyTasksIdsForDeploy = deployHealthHelper.getHealthyTasks( List<SingularityTaskId> healthyTasksIdsForDeploy = deployHealthHelper.getHealthyTasks(
requestWithState.get().getRequest(), requestWithState.getRequest(),
deploy, deploy,
entry.getValue(), entry.getValue(),
pendingDeploy.isPresent() && pendingDeploy.get().getDeployMarker().getDeployId().equals(entry.getKey())); pendingDeploy.isPresent() && pendingDeploy.get().getDeployMarker().getDeployId().equals(entry.getKey()));
Expand Down
Expand Up @@ -52,6 +52,8 @@
import com.hubspot.singularity.data.RequestManager; import com.hubspot.singularity.data.RequestManager;
import com.hubspot.singularity.data.SingularityValidator; import com.hubspot.singularity.data.SingularityValidator;
import com.hubspot.singularity.data.TaskManager; import com.hubspot.singularity.data.TaskManager;
import com.hubspot.singularity.data.history.RequestHistoryHelper;
import com.hubspot.singularity.helpers.RequestHelper;
import com.ning.http.client.AsyncHttpClient; import com.ning.http.client.AsyncHttpClient;
import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation; import com.wordnik.swagger.annotations.ApiOperation;
Expand All @@ -69,8 +71,8 @@ public class DeployResource extends AbstractRequestResource {
@Inject @Inject
public DeployResource(RequestManager requestManager, DeployManager deployManager, SingularityValidator validator, SingularityAuthorizationHelper authorizationHelper, Optional<SingularityUser> user, public DeployResource(RequestManager requestManager, DeployManager deployManager, SingularityValidator validator, SingularityAuthorizationHelper authorizationHelper, Optional<SingularityUser> user,
SingularityConfiguration configuration, TaskManager taskManager, LeaderLatch leaderLatch, SingularityConfiguration configuration, TaskManager taskManager, LeaderLatch leaderLatch,
AsyncHttpClient httpClient, ObjectMapper objectMapper) { AsyncHttpClient httpClient, ObjectMapper objectMapper, RequestHelper requestHelper, RequestHistoryHelper requestHistoryHelper) {
super(requestManager, deployManager, user, validator, authorizationHelper, httpClient, leaderLatch, objectMapper); super(requestManager, deployManager, user, validator, authorizationHelper, httpClient, leaderLatch, objectMapper, requestHelper, requestHistoryHelper);
this.configuration = configuration; this.configuration = configuration;
this.taskManager = taskManager; this.taskManager = taskManager;
} }
Expand Down
Expand Up @@ -4,11 +4,8 @@
import static com.hubspot.singularity.WebExceptions.checkNotFound; import static com.hubspot.singularity.WebExceptions.checkNotFound;
import static com.hubspot.singularity.WebExceptions.notFound; import static com.hubspot.singularity.WebExceptions.notFound;


import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
Expand Down Expand Up @@ -44,14 +41,11 @@
import com.hubspot.singularity.SingularityAction; import com.hubspot.singularity.SingularityAction;
import com.hubspot.singularity.SingularityAuthorizationScope; import com.hubspot.singularity.SingularityAuthorizationScope;
import com.hubspot.singularity.SingularityCreateResult; import com.hubspot.singularity.SingularityCreateResult;
import com.hubspot.singularity.SingularityDeploy;
import com.hubspot.singularity.SingularityKilledTaskIdRecord; import com.hubspot.singularity.SingularityKilledTaskIdRecord;
import com.hubspot.singularity.SingularityPendingDeploy;
import com.hubspot.singularity.SingularityPendingRequest; import com.hubspot.singularity.SingularityPendingRequest;
import com.hubspot.singularity.SingularityPendingRequest.PendingType; import com.hubspot.singularity.SingularityPendingRequest.PendingType;
import com.hubspot.singularity.SingularityPendingTask; import com.hubspot.singularity.SingularityPendingTask;
import com.hubspot.singularity.SingularityPendingTaskId; import com.hubspot.singularity.SingularityPendingTaskId;
import com.hubspot.singularity.SingularityRequestWithState;
import com.hubspot.singularity.SingularityShellCommand; import com.hubspot.singularity.SingularityShellCommand;
import com.hubspot.singularity.SingularitySlave; import com.hubspot.singularity.SingularitySlave;
import com.hubspot.singularity.SingularityTask; import com.hubspot.singularity.SingularityTask;
Expand All @@ -73,14 +67,13 @@
import com.hubspot.singularity.auth.SingularityAuthorizationHelper; import com.hubspot.singularity.auth.SingularityAuthorizationHelper;
import com.hubspot.singularity.config.ApiPaths; import com.hubspot.singularity.config.ApiPaths;
import com.hubspot.singularity.config.SingularityTaskMetadataConfiguration; import com.hubspot.singularity.config.SingularityTaskMetadataConfiguration;
import com.hubspot.singularity.data.DeployManager;
import com.hubspot.singularity.data.DisasterManager; import com.hubspot.singularity.data.DisasterManager;
import com.hubspot.singularity.data.RequestManager; import com.hubspot.singularity.data.RequestManager;
import com.hubspot.singularity.data.SingularityValidator; import com.hubspot.singularity.data.SingularityValidator;
import com.hubspot.singularity.data.SlaveManager; import com.hubspot.singularity.data.SlaveManager;
import com.hubspot.singularity.data.TaskManager; import com.hubspot.singularity.data.TaskManager;
import com.hubspot.singularity.data.TaskRequestManager; import com.hubspot.singularity.data.TaskRequestManager;
import com.hubspot.singularity.scheduler.SingularityDeployHealthHelper; import com.hubspot.singularity.helpers.RequestHelper;
import com.ning.http.client.AsyncHttpClient; import com.ning.http.client.AsyncHttpClient;
import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation; import com.wordnik.swagger.annotations.ApiOperation;
Expand All @@ -103,13 +96,12 @@ public class TaskResource extends AbstractLeaderAwareResource {
private final SingularityTaskMetadataConfiguration taskMetadataConfiguration; private final SingularityTaskMetadataConfiguration taskMetadataConfiguration;
private final SingularityValidator validator; private final SingularityValidator validator;
private final DisasterManager disasterManager; private final DisasterManager disasterManager;
private final SingularityDeployHealthHelper deployHealthHelper; private final RequestHelper requestHelper;
private final DeployManager deployManager;


@Inject @Inject
public TaskResource(TaskRequestManager taskRequestManager, TaskManager taskManager, SlaveManager slaveManager, MesosClient mesosClient, SingularityTaskMetadataConfiguration taskMetadataConfiguration, public TaskResource(TaskRequestManager taskRequestManager, TaskManager taskManager, SlaveManager slaveManager, MesosClient mesosClient, SingularityTaskMetadataConfiguration taskMetadataConfiguration,
SingularityAuthorizationHelper authorizationHelper, Optional<SingularityUser> user, RequestManager requestManager, SingularityValidator validator, DisasterManager disasterManager, SingularityAuthorizationHelper authorizationHelper, Optional<SingularityUser> user, RequestManager requestManager, SingularityValidator validator, DisasterManager disasterManager,
AsyncHttpClient httpClient, LeaderLatch leaderLatch, ObjectMapper objectMapper, SingularityDeployHealthHelper deployHealthHelper, DeployManager deployManager) { AsyncHttpClient httpClient, LeaderLatch leaderLatch, ObjectMapper objectMapper, RequestHelper requestHelper) {
super(httpClient, leaderLatch, objectMapper); super(httpClient, leaderLatch, objectMapper);
this.taskManager = taskManager; this.taskManager = taskManager;
this.taskRequestManager = taskRequestManager; this.taskRequestManager = taskRequestManager;
Expand All @@ -121,8 +113,7 @@ public TaskResource(TaskRequestManager taskRequestManager, TaskManager taskManag
this.user = user; this.user = user;
this.validator = validator; this.validator = validator;
this.disasterManager = disasterManager; this.disasterManager = disasterManager;
this.deployHealthHelper = deployHealthHelper; this.requestHelper = requestHelper;
this.deployManager = deployManager;
} }


@GET @GET
Expand Down Expand Up @@ -199,37 +190,7 @@ public List<SingularityTaskRequest> getScheduledTasksForRequest(@PathParam("requ
public Optional<SingularityTaskIdsByStatus> getTaskIdsByStatusForRequest(@PathParam("requestId") String requestId) { public Optional<SingularityTaskIdsByStatus> getTaskIdsByStatusForRequest(@PathParam("requestId") String requestId) {
authorizationHelper.checkForAuthorizationByRequestId(requestId, user, SingularityAuthorizationScope.READ); authorizationHelper.checkForAuthorizationByRequestId(requestId, user, SingularityAuthorizationScope.READ);


Optional<SingularityRequestWithState> requestWithState = requestManager.getRequest(requestId); return requestHelper.getTaskIdsByStatusForRequest(requestId);
if (!requestWithState.isPresent()) {
return Optional.absent();
}
Optional<SingularityPendingDeploy> pendingDeploy = deployManager.getPendingDeploy(requestId);

List<SingularityTaskId> cleaningTaskIds = taskManager.getCleanupTaskIds().stream().filter((t) -> t.getRequestId().equals(requestId)).collect(Collectors.toList());
List<SingularityPendingTaskId> pendingTaskIds = taskManager.getPendingTaskIdsForRequest(requestId);
List<SingularityTaskId> activeTaskIds = taskManager.getActiveTaskIdsForRequest(requestId);
activeTaskIds.removeAll(cleaningTaskIds);

List<SingularityTaskId> healthyTaskIds = new ArrayList<>();
List<SingularityTaskId> notYetHealthyTaskIds = new ArrayList<>();
Map<String, List<SingularityTaskId>> taskIdsByDeployId = activeTaskIds.stream().collect(Collectors.groupingBy(SingularityTaskId::getDeployId));
for (Map.Entry<String, List<SingularityTaskId>> entry : taskIdsByDeployId.entrySet()) {
Optional<SingularityDeploy> deploy = deployManager.getDeploy(requestId, entry.getKey());
List<SingularityTaskId> healthyTasksIdsForDeploy = deployHealthHelper.getHealthyTasks(
requestWithState.get().getRequest(),
deploy,
entry.getValue(),
pendingDeploy.isPresent() && pendingDeploy.get().getDeployMarker().getDeployId().equals(entry.getKey()));
for (SingularityTaskId taskId : entry.getValue()) {
if (healthyTasksIdsForDeploy.contains(taskId)) {
healthyTaskIds.add(taskId);
} else {
notYetHealthyTaskIds.add(taskId);
}
}
}

return Optional.of(new SingularityTaskIdsByStatus(healthyTaskIds, notYetHealthyTaskIds, pendingTaskIds, cleaningTaskIds));
} }


@GET @GET
Expand Down

0 comments on commit 0a2c91f

Please sign in to comment.