Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Request Priority API #2245

Merged
merged 12 commits into from
Dec 1, 2021
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
public enum SingularityAction {
BOUNCE_REQUEST(true),
SCALE_REQUEST(true),
PRIORITY_REQUEST(true),
REMOVE_REQUEST(true),
CREATE_REQUEST(true),
UPDATE_REQUEST(true),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.hubspot.singularity.expiring.SingularityExpiringBounce;
import com.hubspot.singularity.expiring.SingularityExpiringPause;
import com.hubspot.singularity.expiring.SingularityExpiringPriority;
import com.hubspot.singularity.expiring.SingularityExpiringScale;
import com.hubspot.singularity.expiring.SingularityExpiringSkipHealthchecks;
import java.util.Optional;
Expand All @@ -26,6 +27,7 @@ public static SingularityPendingRequestParent fromSingularityRequestParent(
singularityRequestParent.getExpiringBounce(),
singularityRequestParent.getExpiringPause(),
singularityRequestParent.getExpiringScale(),
singularityRequestParent.getExpiringPriority(),
singularityRequestParent.getExpiringSkipHealthchecks(),
singularityRequestParent.getTaskIds()
);
Expand All @@ -47,6 +49,7 @@ public static SingularityPendingRequestParent minimalFromRequestWithState(
Optional.empty(),
Optional.empty(),
Optional.empty(),
Optional.empty(),
Optional.empty()
);
}
Expand All @@ -67,6 +70,9 @@ public SingularityPendingRequestParent(
@JsonProperty("expiringBounce") Optional<SingularityExpiringBounce> expiringBounce,
@JsonProperty("expiringPause") Optional<SingularityExpiringPause> expiringPause,
@JsonProperty("expiringScale") Optional<SingularityExpiringScale> expiringScale,
@JsonProperty(
"expiringPriority"
) Optional<SingularityExpiringPriority> expiringPriority,
@JsonProperty(
"expiringSkipHealthchecks"
) Optional<SingularityExpiringSkipHealthchecks> expiringSkipHealthchecks,
Expand All @@ -82,6 +88,7 @@ public SingularityPendingRequestParent(
expiringBounce,
expiringPause,
expiringScale,
expiringPriority,
expiringSkipHealthchecks,
taskIds
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.hubspot.singularity.expiring.SingularityExpiringBounce;
import com.hubspot.singularity.expiring.SingularityExpiringPause;
import com.hubspot.singularity.expiring.SingularityExpiringPriority;
import com.hubspot.singularity.expiring.SingularityExpiringScale;
import com.hubspot.singularity.expiring.SingularityExpiringSkipHealthchecks;
import io.swagger.v3.oas.annotations.media.Schema;
Expand All @@ -21,6 +22,7 @@ public class SingularityRequestParent {
private final Optional<SingularityExpiringPause> expiringPause;
private final Optional<SingularityExpiringScale> expiringScale;
private final Optional<SingularityExpiringSkipHealthchecks> expiringSkipHealthchecks;
private final Optional<SingularityExpiringPriority> expiringPriority;
private final Optional<SingularityTaskIdsByStatus> taskIds;

public SingularityRequestParent(SingularityRequest request, RequestState state) {
Expand All @@ -43,6 +45,7 @@ public SingularityRequestParent(
Optional.empty(),
Optional.empty(),
Optional.empty(),
Optional.empty(),
Optional.empty()
);
}
Expand All @@ -62,6 +65,9 @@ public SingularityRequestParent(
@JsonProperty("expiringBounce") Optional<SingularityExpiringBounce> expiringBounce,
@JsonProperty("expiringPause") Optional<SingularityExpiringPause> expiringPause,
@JsonProperty("expiringScale") Optional<SingularityExpiringScale> expiringScale,
@JsonProperty(
"expiringPriority"
) Optional<SingularityExpiringPriority> expiringPriority,
@JsonProperty(
"expiringSkipHealthchecks"
) Optional<SingularityExpiringSkipHealthchecks> expiringSkipHealthchecks,
Expand All @@ -76,6 +82,7 @@ public SingularityRequestParent(
this.expiringBounce = expiringBounce;
this.expiringPause = expiringPause;
this.expiringScale = expiringScale;
this.expiringPriority = expiringPriority;
this.expiringSkipHealthchecks = expiringSkipHealthchecks;
this.taskIds = taskIds;
}
Expand Down Expand Up @@ -153,6 +160,14 @@ public Optional<SingularityExpiringSkipHealthchecks> getExpiringSkipHealthchecks
return expiringSkipHealthchecks;
}

@Schema(
description = "Details about an request priority action that will eventually revert",
nullable = true
)
public Optional<SingularityExpiringPriority> getExpiringPriority() {
return expiringPriority;
}

@Schema(
description = "A list of active and pending task ids, separated by status",
nullable = true
Expand Down Expand Up @@ -185,6 +200,8 @@ public String toString() {
expiringScale +
", expiringSkipHealthchecks=" +
expiringSkipHealthchecks +
", expiringPriority=" +
expiringPriority +
", taskIds=" +
taskIds +
'}'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ public enum SingularityUserFacingAction {
BOUNCE,
PAUSE,
SCALE,
PRIORITIZE,
KILL_TASK,
DELETE_SCHEDULED_TASK,
RUN_SHELL_COMMAND
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
SingularityMachineChangeRequest.class,
SingularityExpiringParent.class,
SingularityScaleRequest.class,
SingularityPriorityRequest.class,
SingularityBounceRequest.class,
SingularityExpiringSkipHealthchecks.class
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.hubspot.singularity.api;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.hubspot.singularity.SingularityRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Optional;

@Schema(description = "Describes the new priority (0 to 1) for a request")
public class SingularityPriorityRequest extends SingularityExpiringRequestParent {
/** see {@link SingularityRequest#getTaskPriorityLevel()} */
private final Optional<Double> priority;

public SingularityPriorityRequest(
@JsonProperty("durationMillis") Optional<Long> durationMillis,
@JsonProperty("actionId") Optional<String> actionId,
@JsonProperty("message") Optional<String> message,
@JsonProperty("priority") Optional<Double> priority,
@JsonProperty("skipEmailNotification") Optional<Boolean> skipEmailNotification
) {
super(durationMillis, actionId, message);
this.priority = priority;
}

public Optional<Double> getPriority() {
return priority;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.hubspot.singularity.expiring;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.hubspot.singularity.api.SingularityPriorityRequest;
import com.hubspot.singularity.api.SingularityScaleRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Optional;

@Schema(description = "Details about a scale action that will eventually revert")
public class SingularityExpiringPriority
extends SingularityExpiringRequestActionParent<SingularityPriorityRequest> {
private final Optional<Double> revertToPriority;

public SingularityExpiringPriority(
@JsonProperty("requestId") String requestId,
@JsonProperty("user") Optional<String> user,
@JsonProperty("startMillis") long startMillis,
@JsonProperty("expiringAPIRequestObject") SingularityPriorityRequest request,
@JsonProperty("revertToPriority") Optional<Double> revertToPriority,
@JsonProperty("actionId") String actionId
) {
super(request, user, startMillis, actionId, requestId);
this.revertToPriority = revertToPriority;
}

@Schema(
description = "The scheduling priority to update to when time has elapsed",
nullable = true
)
public Optional<Double> getRevertToPriority() {
return revertToPriority;
}

@Override
public String toString() {
return "SingularityExpiringPriority{" + "revertToPriority=" + revertToPriority + '}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import com.hubspot.singularity.event.SingularityEventListener;
import com.hubspot.singularity.expiring.SingularityExpiringBounce;
import com.hubspot.singularity.expiring.SingularityExpiringPause;
import com.hubspot.singularity.expiring.SingularityExpiringPriority;
import com.hubspot.singularity.expiring.SingularityExpiringRequestActionParent;
import com.hubspot.singularity.expiring.SingularityExpiringScale;
import com.hubspot.singularity.expiring.SingularityExpiringSkipHealthchecks;
Expand Down Expand Up @@ -79,6 +80,8 @@ public class RequestManager extends CuratorAsyncManager {
EXPIRING_ACTION_PATH_ROOT + "/pause";
private static final String EXPIRING_SCALE_PATH_ROOT =
EXPIRING_ACTION_PATH_ROOT + "/scale";
private static final String EXPIRING_PRIORITY_PATH_ROOT =
EXPIRING_ACTION_PATH_ROOT + "/priority";
private static final String EXPIRING_SKIP_HC_PATH_ROOT =
EXPIRING_ACTION_PATH_ROOT + "/skipHc";

Expand All @@ -90,7 +93,9 @@ public class RequestManager extends CuratorAsyncManager {
SingularityExpiringScale.class,
EXPIRING_SCALE_PATH_ROOT,
SingularityExpiringSkipHealthchecks.class,
EXPIRING_SKIP_HC_PATH_ROOT
EXPIRING_SKIP_HC_PATH_ROOT,
SingularityExpiringPriority.class,
EXPIRING_PRIORITY_PATH_ROOT
);

private final Map<Class<? extends SingularityExpiringRequestActionParent<? extends SingularityExpiringRequestParent>>, Transcoder<? extends SingularityExpiringRequestActionParent<? extends SingularityExpiringRequestParent>>> expiringTranscoderMap;
Expand All @@ -111,6 +116,7 @@ public RequestManager(
Transcoder<SingularityExpiringScale> expiringScaleTranscoder,
Transcoder<SingularityExpiringPause> expiringPauseTranscoder,
Transcoder<SingularityExpiringSkipHealthchecks> expiringSkipHealthchecksTranscoder,
Transcoder<SingularityExpiringPriority> expiringPriorityTranscoder,
SingularityWebCache webCache,
SingularityLeaderCache leaderCache,
Transcoder<CrashLoopInfo> crashLoopInfoTranscoder,
Expand All @@ -134,7 +140,9 @@ public RequestManager(
SingularityExpiringScale.class,
expiringScaleTranscoder,
SingularityExpiringSkipHealthchecks.class,
expiringSkipHealthchecksTranscoder
expiringSkipHealthchecksTranscoder,
SingularityExpiringPriority.class,
expiringPriorityTranscoder
);

this.leaderCache = leaderCache;
Expand Down Expand Up @@ -926,4 +934,8 @@ public List<CrashLoopInfo> getAllCrashLoops() {
.flatMap(r -> getCrashLoopsForRequest(r).stream())
.collect(Collectors.toList());
}

public Optional<SingularityExpiringPriority> getExpiringPriority(String id) {
return getExpiringObject(SingularityExpiringPriority.class, id);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
import com.hubspot.singularity.expiring.SingularityExpiringBounce;
import com.hubspot.singularity.expiring.SingularityExpiringMachineState;
import com.hubspot.singularity.expiring.SingularityExpiringPause;
import com.hubspot.singularity.expiring.SingularityExpiringPriority;
import com.hubspot.singularity.expiring.SingularityExpiringScale;
import com.hubspot.singularity.expiring.SingularityExpiringSkipHealthchecks;

Expand Down Expand Up @@ -94,6 +95,7 @@ public void configure(final Binder binder) {
bindTranscoder(binder).asJson(SingularityExpiringBounce.class);
bindTranscoder(binder).asJson(SingularityExpiringPause.class);
bindTranscoder(binder).asJson(SingularityExpiringScale.class);
bindTranscoder(binder).asJson(SingularityExpiringPriority.class);
bindTranscoder(binder).asJson(SingularityExpiringSkipHealthchecks.class);
bindTranscoder(binder).asJson(SingularityTaskDestroyFrameworkMessage.class);
bindTranscoder(binder).asJson(SingularityTaskReconciliationStatistics.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import com.hubspot.singularity.data.UserManager;
import com.hubspot.singularity.expiring.SingularityExpiringBounce;
import com.hubspot.singularity.expiring.SingularityExpiringPause;
import com.hubspot.singularity.expiring.SingularityExpiringPriority;
import com.hubspot.singularity.expiring.SingularityExpiringScale;
import com.hubspot.singularity.expiring.SingularityExpiringSkipHealthchecks;
import com.hubspot.singularity.scheduler.SingularityDeployHealthHelper;
Expand Down Expand Up @@ -466,6 +467,14 @@ public List<SingularityRequestParent> fillDataForRequestsAndFilter(
)
)
.exceptionally(throwable -> Optional.empty());
CompletableFuture<Optional<SingularityExpiringPriority>> maybeExpiringPriority = CompletableFuture
.supplyAsync(
() ->
requestManager.getExpiringPriority(
requestWithState.getRequest().getId()
)
)
.exceptionally(throwable -> Optional.empty());
return new SingularityRequestParent(
requestWithState.getRequest(),
requestWithState.getState(),
Expand All @@ -478,6 +487,7 @@ public List<SingularityRequestParent> fillDataForRequestsAndFilter(
maybeExpiringBounce.join(),
maybeExpiringPause.join(),
maybeExpiringScale.join(),
maybeExpiringPriority.join(),
maybeExpiringSkipHealthchecks.join(),
maybeTaskIdsByStatus.join()
);
Expand All @@ -495,6 +505,7 @@ public List<SingularityRequestParent> fillDataForRequestsAndFilter(
Optional.empty(),
Optional.empty(),
Optional.empty(),
Optional.empty(),
Optional.empty()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ protected SingularityRequestParent fillEntireRequest(
requestManager.getExpiringBounce(requestId),
requestManager.getExpiringPause(requestId),
requestManager.getExpiringScale(requestId),
requestManager.getExpiringPriority(requestId),
requestManager.getExpiringSkipHealthchecks(requestId),
requestHelper.getTaskIdsByStatusForRequest(requestId)
);
Expand Down
Loading