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

Opt out of even number across racks. #949

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -47,6 +47,8 @@ public class SingularityRequest {

private final Optional<Map<SingularityEmailType, List<SingularityEmailDestination>>> emailConfigurationOverrides;

private final Optional<Boolean> hideEvenNumberAcrossRacksHint;

@JsonCreator
public SingularityRequest(@JsonProperty("id") String id, @JsonProperty("requestType") RequestType requestType, @JsonProperty("owners") Optional<List<String>> owners,
@JsonProperty("numRetriesOnFailure") Optional<Integer> numRetriesOnFailure, @JsonProperty("schedule") Optional<String> schedule, @JsonProperty("instances") Optional<Integer> instances,
Expand All @@ -58,7 +60,8 @@ public SingularityRequest(@JsonProperty("id") String id, @JsonProperty("requestT
@JsonProperty("waitAtLeastMillisAfterTaskFinishesForReschedule") Optional<Long> waitAtLeastMillisAfterTaskFinishesForReschedule, @JsonProperty("group") Optional<String> group,
@JsonProperty("readOnlyGroups") Optional<Set<String>> readOnlyGroups, @JsonProperty("bounceAfterScale") Optional<Boolean> bounceAfterScale,
@JsonProperty("skipHealthchecks") Optional<Boolean> skipHealthchecks,
@JsonProperty("emailConfigurationOverrides") Optional<Map<SingularityEmailType, List<SingularityEmailDestination>>> emailConfigurationOverrides, @JsonProperty("daemon") @Deprecated Optional<Boolean> daemon) {
@JsonProperty("emailConfigurationOverrides") Optional<Map<SingularityEmailType, List<SingularityEmailDestination>>> emailConfigurationOverrides,
@JsonProperty("daemon") @Deprecated Optional<Boolean> daemon, @JsonProperty("hideEvenNumberAcrossRacks") Optional<Boolean> hideEvenNumberAcrossRacksHint) {
this.id = checkNotNull(id, "id cannot be null");
this.owners = owners;
this.numRetriesOnFailure = numRetriesOnFailure;
Expand All @@ -80,6 +83,7 @@ public SingularityRequest(@JsonProperty("id") String id, @JsonProperty("requestT
this.bounceAfterScale = bounceAfterScale;
this.emailConfigurationOverrides = emailConfigurationOverrides;
this.skipHealthchecks = skipHealthchecks;
this.hideEvenNumberAcrossRacksHint = hideEvenNumberAcrossRacksHint;
if (requestType == null) {
this.requestType = RequestType.fromDaemonAndScheduleAndLoadBalanced(schedule, daemon, loadBalanced);
} else {
Expand Down Expand Up @@ -108,7 +112,8 @@ public SingularityRequestBuilder toBuilder() {
.setReadOnlyGroups(readOnlyGroups)
.setBounceAfterScale(bounceAfterScale)
.setEmailConfigurationOverrides(emailConfigurationOverrides)
.setSkipHealthchecks(skipHealthchecks);
.setSkipHealthchecks(skipHealthchecks)
.setHideEvenNumberAcrossRacksHint(hideEvenNumberAcrossRacksHint);
}

public String getId() {
Expand Down Expand Up @@ -252,6 +257,8 @@ public Optional<Boolean> getSkipHealthchecks() {
return skipHealthchecks;
}

public Optional<Boolean> getHideEvenNumberAcrossRacksHint() { return hideEvenNumberAcrossRacksHint; }

@Override
public String toString() {
return "SingularityRequest[" +
Expand All @@ -276,6 +283,7 @@ public String toString() {
", readOnlyGroups=" + readOnlyGroups +
", bounceAfterScale=" + bounceAfterScale +
", emailConfigurationOverrides=" + emailConfigurationOverrides +
", hideEvenNumberAcrossRacksHint=" + hideEvenNumberAcrossRacksHint +
']';
}

Expand Down Expand Up @@ -308,11 +316,12 @@ public boolean equals(Object o) {
Objects.equals(group, request.group) &&
Objects.equals(readOnlyGroups, request.readOnlyGroups) &&
Objects.equals(bounceAfterScale, request.bounceAfterScale) &&
Objects.equals(emailConfigurationOverrides, request.emailConfigurationOverrides);
Objects.equals(emailConfigurationOverrides, request.emailConfigurationOverrides) &&
Objects.equals(hideEvenNumberAcrossRacksHint, request.hideEvenNumberAcrossRacksHint);
}

@Override
public int hashCode() {
return Objects.hash(id, requestType, owners, numRetriesOnFailure, schedule, quartzSchedule, scheduleType, killOldNonLongRunningTasksAfterMillis, scheduledExpectedRuntimeMillis, waitAtLeastMillisAfterTaskFinishesForReschedule, instances, rackSensitive, rackAffinity, slavePlacement, requiredSlaveAttributes, allowedSlaveAttributes, loadBalanced, group, readOnlyGroups, bounceAfterScale, emailConfigurationOverrides);
return Objects.hash(id, requestType, owners, numRetriesOnFailure, schedule, quartzSchedule, scheduleType, killOldNonLongRunningTasksAfterMillis, scheduledExpectedRuntimeMillis, waitAtLeastMillisAfterTaskFinishesForReschedule, instances, rackSensitive, rackAffinity, slavePlacement, requiredSlaveAttributes, allowedSlaveAttributes, loadBalanced, group, readOnlyGroups, bounceAfterScale, emailConfigurationOverrides, hideEvenNumberAcrossRacksHint);
}
}
Expand Up @@ -41,6 +41,7 @@ public class SingularityRequestBuilder {
private Optional<Set<String>> readOnlyGroups;
private Optional<Boolean> bounceAfterScale;
private Optional<Map<SingularityEmailType, List<SingularityEmailDestination>>> emailConfigurationOverrides;
private Optional<Boolean> hideEvenNumberAcrossRacksHint;

public SingularityRequestBuilder(String id, RequestType requestType) {
this.id = checkNotNull(id, "id cannot be null");
Expand All @@ -65,12 +66,13 @@ public SingularityRequestBuilder(String id, RequestType requestType) {
this.bounceAfterScale = Optional.absent();
this.emailConfigurationOverrides = Optional.absent();
this.skipHealthchecks = Optional.absent();
this.hideEvenNumberAcrossRacksHint = Optional.absent();
}

public SingularityRequest build() {
return new SingularityRequest(id, requestType, owners, numRetriesOnFailure, schedule, instances, rackSensitive, loadBalanced, killOldNonLongRunningTasksAfterMillis, scheduleType, quartzSchedule,
rackAffinity, slavePlacement, requiredSlaveAttributes, allowedSlaveAttributes, scheduledExpectedRuntimeMillis, waitAtLeastMillisAfterTaskFinishesForReschedule, group, readOnlyGroups,
bounceAfterScale, skipHealthchecks, emailConfigurationOverrides, Optional.<Boolean>absent());
bounceAfterScale, skipHealthchecks, emailConfigurationOverrides, Optional.<Boolean>absent(), hideEvenNumberAcrossRacksHint);
}

public Optional<Boolean> getSkipHealthchecks() {
Expand Down Expand Up @@ -253,6 +255,13 @@ public SingularityRequestBuilder setEmailConfigurationOverrides(Optional<Map<Sin
return this;
}

public Optional<Boolean> getHideEvenNumberAcrossRacksHint() { return hideEvenNumberAcrossRacksHint; }

public SingularityRequestBuilder setHideEvenNumberAcrossRacksHint(Optional<Boolean> hideEvenNumberAcrossRacksHint) {
this.hideEvenNumberAcrossRacksHint = hideEvenNumberAcrossRacksHint;
return this;
}

@Override
public String toString() {
return "SingularityRequestBuilder[" +
Expand All @@ -278,6 +287,7 @@ public String toString() {
", bounceAfterScale=" + bounceAfterScale +
", emailConfigurationOverrides=" + emailConfigurationOverrides +
", skipHealthchecks=" + skipHealthchecks +
", hideEvenNumberAcrossRacksHint=" + hideEvenNumberAcrossRacksHint +
']';
}

Expand Down Expand Up @@ -311,14 +321,15 @@ public boolean equals(Object o) {
Objects.equals(readOnlyGroups, that.readOnlyGroups) &&
Objects.equals(bounceAfterScale, that.bounceAfterScale) &&
Objects.equals(skipHealthchecks, that.skipHealthchecks) &&
Objects.equals(emailConfigurationOverrides, that.emailConfigurationOverrides);
Objects.equals(emailConfigurationOverrides, that.emailConfigurationOverrides) &&
Objects.equals(hideEvenNumberAcrossRacksHint, that.hideEvenNumberAcrossRacksHint);
}

@Override
public int hashCode() {
return Objects.hash(id, requestType, owners, numRetriesOnFailure, schedule, quartzSchedule, scheduleType, killOldNonLongRunningTasksAfterMillis,
scheduledExpectedRuntimeMillis, waitAtLeastMillisAfterTaskFinishesForReschedule, instances, rackSensitive, rackAffinity, slavePlacement,
requiredSlaveAttributes, allowedSlaveAttributes, loadBalanced, group, readOnlyGroups, bounceAfterScale, skipHealthchecks, emailConfigurationOverrides);
requiredSlaveAttributes, allowedSlaveAttributes, loadBalanced, group, readOnlyGroups, bounceAfterScale, skipHealthchecks, emailConfigurationOverrides, hideEvenNumberAcrossRacksHint);
}

}
2 changes: 1 addition & 1 deletion SingularityUI/app/models/Request.coffee
Expand Up @@ -310,7 +310,7 @@ class Request extends Model
message = $('.vex #scale-message').val()
duration = $('.vex #scale-expiration').val()
if !duration or (duration and @_validateDuration(duration, @promptScale, callback))
if @attributes.request.rackSensitive
if @attributes.request.rackSensitive and not @attributes.request.hideEvenNumberAcrossRacksHint
if @racks
@checkScaleEvenNumberRacks data, bounce, incremental, message, duration, callback
else
Expand Down
16 changes: 16 additions & 0 deletions SingularityUI/app/templates/requestForm.hbs
Expand Up @@ -74,6 +74,14 @@
</label>
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label for="hide-distribute-across-racks-hint-SERVICE" data-tooltip='hide-distribute-across-racks-hint'>
<input type="checkbox" id="hide-distribute-across-racks-hint-SERVICE">
Hide Distribute Evenly Across Racks Hint
</label>
</div>
</div>
{{#if config.loadBalancingEnabled }}
<div class="col-sm-4">
<div class="form-group">
Expand Down Expand Up @@ -109,6 +117,14 @@
</label>
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label for="hide-distribute-across-racks-hint-WORKER" data-tooltip='hide-distribute-across-racks-hint'>
<input type="checkbox" id="hide-distribute-across-racks-hint-WORKER">
Hide Distribute Evenly Across Racks Hint
</label>
</div>
</div>
</div>
<div class="form-group">
<label for="waitAtLeast-WORKER">Task rescheduling delay</label>
Expand Down
4 changes: 4 additions & 0 deletions SingularityUI/app/views/requestFormBase.coffee
Expand Up @@ -92,9 +92,13 @@ class RequestFormBase extends FormBaseView
requestObject.waitAtLeastMillisAfterTaskFinishesForReschedule = waitAtLeast if waitAtLeast

requestObject.rackSensitive = @$("#rack-sensitive-#{ type }").is ':checked'

requestObject.hideEvenNumberAcrossRacksHint = @$("#hide-distribute-across-racks-hint-#{ type }").is ':checked'

requestObject.rackAffinity = @getSelect2Val "#rackAffinity-#{ type }"

debugger
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this shouldn't be committed

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You are right, editing that out.


if type in ['SCHEDULED', 'ON_DEMAND', 'RUN_ONCE']
killOld = parseInt @$("#killOldNRL-#{ type }").val()
requestObject.killOldNonLongRunningTasksAfterMillis = killOld if killOld
Expand Down