@@ -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 ());
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 ());
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