Skip to content

Commit 08b8874

Browse files
committed
Update validation
1 parent 36bcb0a commit 08b8874

3 files changed

Lines changed: 43 additions & 19 deletions

File tree

SingularityService/src/main/java/com/hubspot/singularity/data/SingularityValidator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,7 +1212,7 @@ private boolean isAllowBounceToSameHost(SingularityRequest request) {
12121212
public void checkScale(
12131213
SingularityRequest request,
12141214
Optional<Integer> previousScale,
1215-
Boolean largeScaleDownAcknowledged
1215+
Optional<Boolean> largeScaleDownAcknowledged
12161216
) {
12171217
AgentPlacement placement = request.getAgentPlacement().orElse(defaultAgentPlacement);
12181218

@@ -1244,7 +1244,7 @@ public void checkScale(
12441244
}
12451245
}
12461246

1247-
if (previousScale.isPresent() && !largeScaleDownAcknowledged) {
1247+
if (previousScale.isPresent() && !largeScaleDownAcknowledged.orElse(false)) {
12481248
int absMaxScaleDown = singularityConfiguration.getMaxScaleDownWithoutAcknowledgement();
12491249
boolean scaleDownExceedsAbsoluteMax =
12501250
previousScale.get() - request.getInstancesSafe() > absMaxScaleDown;

SingularityService/src/main/java/com/hubspot/singularity/resources/DeployResource.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public SingularityRequestParent deploy(
133133
required = true,
134134
description = "Deploy data"
135135
) SingularityDeployRequest deployRequest,
136-
@QueryParam("largeScaleDownAcknowledged") Boolean largeScaleDownAcknowledged
136+
@QueryParam("largeScaleDownAcknowledged") Optional<Boolean> largeScaleDownAcknowledged
137137
) {
138138
return maybeProxyToLeader(
139139
requestContext,
@@ -146,7 +146,7 @@ public SingularityRequestParent deploy(
146146
public SingularityRequestParent deploy(
147147
SingularityDeployRequest deployRequest,
148148
SingularityUser user,
149-
Boolean largeScaleDownAcknowledged
149+
Optional<Boolean> largeScaleDownAcknowledged
150150
) {
151151
validator.checkActionEnabled(SingularityAction.DEPLOY);
152152
SingularityDeploy deploy = deployRequest.getDeploy();

SingularityService/src/main/java/com/hubspot/singularity/resources/RequestResource.java

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ private void submitRequest(
168168
Optional<Boolean> skipHealthchecks,
169169
Optional<String> message,
170170
Optional<SingularityBounceRequest> maybeBounceRequest,
171-
SingularityUser user
171+
SingularityUser user,
172+
Optional<Boolean> largeScaleDownAcknowledged
172173
) {
173174
checkNotNullBadRequest(request.getId(), "Request must have an id");
174175
checkConflict(
@@ -224,11 +225,14 @@ private void submitRequest(
224225
request.toBuilder().setInstances(Optional.of(currentActiveAgentCount)).build();
225226
}
226227

227-
if (
228-
!oldRequest.isPresent() ||
229-
!(oldRequest.get().getInstancesSafe() == request.getInstancesSafe())
230-
) {
231-
validator.checkScale(request, Optional.empty(), false);
228+
if (!oldRequest.isPresent()) {
229+
validator.checkScale(request, Optional.empty(), largeScaleDownAcknowledged);
230+
} else if (!(oldRequest.get().getInstancesSafe() == request.getInstancesSafe())) {
231+
validator.checkScale(
232+
request,
233+
Optional.of(oldRequest.get().getInstancesSafe()),
234+
largeScaleDownAcknowledged
235+
);
232236
}
233237

234238
authorizationHelper.checkForAuthorization(
@@ -383,7 +387,8 @@ public SingularityRequestParent postRequest(
383387
Optional.empty(),
384388
Optional.empty(),
385389
Optional.empty(),
386-
user
390+
user,
391+
Optional.empty()
387392
);
388393
return fillEntireRequest(fetchRequestWithState(request.getId(), user));
389394
}
@@ -463,7 +468,8 @@ private SingularityRequestParent updateAuthorizedGroups(
463468
Optional.empty(),
464469
updateGroupsRequest.getMessage(),
465470
Optional.empty(),
466-
user
471+
user,
472+
Optional.empty()
467473
);
468474
return fillEntireRequest(fetchRequestWithState(requestId, user));
469475
}
@@ -1735,7 +1741,8 @@ public SingularityRequestParent setPriority(
17351741
Optional.of(false),
17361742
Optional.of(message),
17371743
Optional.empty(),
1738-
user
1744+
user,
1745+
Optional.empty()
17391746
);
17401747

17411748
if (priorityRequest.getDurationMillis().isPresent()) {
@@ -1775,20 +1782,30 @@ public SingularityRequestParent scale(
17751782
@RequestBody(
17761783
required = true,
17771784
description = "Object to hold number of instances to request"
1778-
) SingularityScaleRequest scaleRequest
1785+
) SingularityScaleRequest scaleRequest,
1786+
@QueryParam("largeScaleDownAcknowledged") Optional<Boolean> largeScaleDownAcknowledged
17791787
) {
17801788
return maybeProxyToLeader(
17811789
requestContext,
17821790
SingularityRequestParent.class,
17831791
scaleRequest,
1784-
() -> scale(requestId, scaleRequest, user)
1792+
() -> scale(requestId, scaleRequest, user, largeScaleDownAcknowledged)
17851793
);
17861794
}
17871795

17881796
public SingularityRequestParent scale(
17891797
String requestId,
17901798
SingularityScaleRequest scaleRequest,
17911799
SingularityUser user
1800+
) {
1801+
return scale(requestId, scaleRequest, user, Optional.empty());
1802+
}
1803+
1804+
public SingularityRequestParent scale(
1805+
String requestId,
1806+
SingularityScaleRequest scaleRequest,
1807+
SingularityUser user,
1808+
Optional<Boolean> largeScaleDownAcknowledged
17921809
) {
17931810
SingularityRequestWithState oldRequestWithState = fetchRequestWithState(
17941811
requestId,
@@ -1808,7 +1825,11 @@ public SingularityRequestParent scale(
18081825
.toBuilder()
18091826
.setInstances(scaleRequest.getInstances())
18101827
.build();
1811-
validator.checkScale(newRequest, Optional.<Integer>empty(), false);
1828+
validator.checkScale(
1829+
newRequest,
1830+
oldRequest.getInstances(),
1831+
largeScaleDownAcknowledged
1832+
);
18121833

18131834
checkBadRequest(
18141835
oldRequest.getInstancesSafe() != newRequest.getInstancesSafe(),
@@ -1871,7 +1892,8 @@ public SingularityRequestParent scale(
18711892
scaleRequest.getSkipHealthchecks(),
18721893
Optional.of(scaleMessage),
18731894
Optional.of(bounceRequest),
1874-
user
1895+
user,
1896+
largeScaleDownAcknowledged
18751897
);
18761898
} else {
18771899
submitRequest(
@@ -1881,7 +1903,8 @@ public SingularityRequestParent scale(
18811903
scaleRequest.getSkipHealthchecks(),
18821904
Optional.of(scaleMessage),
18831905
Optional.empty(),
1884-
user
1906+
user,
1907+
largeScaleDownAcknowledged
18851908
);
18861909
}
18871910

@@ -2117,7 +2140,8 @@ public SingularityRequestParent skipHealthchecks(
21172140
Optional.empty(),
21182141
skipHealthchecksRequest.getMessage(),
21192142
Optional.empty(),
2120-
user
2143+
user,
2144+
Optional.empty()
21212145
);
21222146

21232147
if (skipHealthchecksRequest.getDurationMillis().isPresent()) {

0 commit comments

Comments
 (0)