Skip to content

Commit 6cc2ff1

Browse files
committed
util: In OutlierDetectionLb, don't box longs if they can't be null
Changed the builder pattern to pass the builder to the constructor, since I was changing almost all the arguments of the constructor anyway.
1 parent 13fe008 commit 6cc2ff1

File tree

1 file changed

+61
-85
lines changed

1 file changed

+61
-85
lines changed

util/src/main/java/io/grpc/util/OutlierDetectionLoadBalancer.java

Lines changed: 61 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public Status acceptResolvedAddresses(ResolvedAddresses resolvedAddresses) {
142142
// If outlier detection is actually configured, start a timer that will periodically try to
143143
// detect outliers.
144144
if (config.outlierDetectionEnabled()) {
145-
Long initialDelayNanos;
145+
long initialDelayNanos;
146146

147147
if (detectionTimerStartNanos == null) {
148148
// On the first go we use the configured interval.
@@ -723,7 +723,7 @@ void swapCounters() {
723723
* that don't have ejected subchannels and uneject ones that have spent the maximum ejection
724724
* time allowed.
725725
*/
726-
void maybeUnejectOutliers(Long detectionTimerStartNanos) {
726+
void maybeUnejectOutliers(long detectionTimerStartNanos) {
727727
for (EndpointTracker tracker : trackerMap.values()) {
728728
if (!tracker.subchannelsEjected()) {
729729
tracker.decrementEjectionTimeMultiplier();
@@ -951,64 +951,54 @@ private static boolean hasSingleAddress(List<EquivalentAddressGroup> addressGrou
951951
*/
952952
public static final class OutlierDetectionLoadBalancerConfig {
953953

954-
public final Long intervalNanos;
955-
public final Long baseEjectionTimeNanos;
956-
public final Long maxEjectionTimeNanos;
957-
public final Integer maxEjectionPercent;
954+
public final long intervalNanos;
955+
public final long baseEjectionTimeNanos;
956+
public final long maxEjectionTimeNanos;
957+
public final int maxEjectionPercent;
958958
public final SuccessRateEjection successRateEjection;
959959
public final FailurePercentageEjection failurePercentageEjection;
960960
public final Object childConfig;
961961

962-
private OutlierDetectionLoadBalancerConfig(Long intervalNanos,
963-
Long baseEjectionTimeNanos,
964-
Long maxEjectionTimeNanos,
965-
Integer maxEjectionPercent,
966-
SuccessRateEjection successRateEjection,
967-
FailurePercentageEjection failurePercentageEjection,
968-
Object childConfig) {
969-
this.intervalNanos = intervalNanos;
970-
this.baseEjectionTimeNanos = baseEjectionTimeNanos;
971-
this.maxEjectionTimeNanos = maxEjectionTimeNanos;
972-
this.maxEjectionPercent = maxEjectionPercent;
973-
this.successRateEjection = successRateEjection;
974-
this.failurePercentageEjection = failurePercentageEjection;
975-
this.childConfig = childConfig;
962+
private OutlierDetectionLoadBalancerConfig(Builder builder) {
963+
this.intervalNanos = builder.intervalNanos;
964+
this.baseEjectionTimeNanos = builder.baseEjectionTimeNanos;
965+
this.maxEjectionTimeNanos = builder.maxEjectionTimeNanos;
966+
this.maxEjectionPercent = builder.maxEjectionPercent;
967+
this.successRateEjection = builder.successRateEjection;
968+
this.failurePercentageEjection = builder.failurePercentageEjection;
969+
this.childConfig = builder.childConfig;
976970
}
977971

978972
/** Builds a new {@link OutlierDetectionLoadBalancerConfig}. */
979973
public static class Builder {
980-
Long intervalNanos = 10_000_000_000L; // 10s
981-
Long baseEjectionTimeNanos = 30_000_000_000L; // 30s
982-
Long maxEjectionTimeNanos = 300_000_000_000L; // 300s
983-
Integer maxEjectionPercent = 10;
974+
long intervalNanos = 10_000_000_000L; // 10s
975+
long baseEjectionTimeNanos = 30_000_000_000L; // 30s
976+
long maxEjectionTimeNanos = 300_000_000_000L; // 300s
977+
int maxEjectionPercent = 10;
984978
SuccessRateEjection successRateEjection;
985979
FailurePercentageEjection failurePercentageEjection;
986980
Object childConfig;
987981

988982
/** The interval between outlier detection sweeps. */
989-
public Builder setIntervalNanos(Long intervalNanos) {
990-
checkArgument(intervalNanos != null);
983+
public Builder setIntervalNanos(long intervalNanos) {
991984
this.intervalNanos = intervalNanos;
992985
return this;
993986
}
994987

995988
/** The base time an address is ejected for. */
996-
public Builder setBaseEjectionTimeNanos(Long baseEjectionTimeNanos) {
997-
checkArgument(baseEjectionTimeNanos != null);
989+
public Builder setBaseEjectionTimeNanos(long baseEjectionTimeNanos) {
998990
this.baseEjectionTimeNanos = baseEjectionTimeNanos;
999991
return this;
1000992
}
1001993

1002994
/** The longest time an address can be ejected. */
1003-
public Builder setMaxEjectionTimeNanos(Long maxEjectionTimeNanos) {
1004-
checkArgument(maxEjectionTimeNanos != null);
995+
public Builder setMaxEjectionTimeNanos(long maxEjectionTimeNanos) {
1005996
this.maxEjectionTimeNanos = maxEjectionTimeNanos;
1006997
return this;
1007998
}
1008999

10091000
/** The algorithm agnostic maximum percentage of addresses that can be ejected. */
1010-
public Builder setMaxEjectionPercent(Integer maxEjectionPercent) {
1011-
checkArgument(maxEjectionPercent != null);
1001+
public Builder setMaxEjectionPercent(int maxEjectionPercent) {
10121002
this.maxEjectionPercent = maxEjectionPercent;
10131003
return this;
10141004
}
@@ -1040,118 +1030,106 @@ public Builder setChildConfig(Object childConfig) {
10401030
/** Builds a new instance of {@link OutlierDetectionLoadBalancerConfig}. */
10411031
public OutlierDetectionLoadBalancerConfig build() {
10421032
checkState(childConfig != null);
1043-
return new OutlierDetectionLoadBalancerConfig(intervalNanos, baseEjectionTimeNanos,
1044-
maxEjectionTimeNanos, maxEjectionPercent, successRateEjection,
1045-
failurePercentageEjection, childConfig);
1033+
return new OutlierDetectionLoadBalancerConfig(this);
10461034
}
10471035
}
10481036

10491037
/** The configuration for success rate ejection. */
10501038
public static class SuccessRateEjection {
10511039

1052-
public final Integer stdevFactor;
1053-
public final Integer enforcementPercentage;
1054-
public final Integer minimumHosts;
1055-
public final Integer requestVolume;
1056-
1057-
SuccessRateEjection(Integer stdevFactor, Integer enforcementPercentage, Integer minimumHosts,
1058-
Integer requestVolume) {
1059-
this.stdevFactor = stdevFactor;
1060-
this.enforcementPercentage = enforcementPercentage;
1061-
this.minimumHosts = minimumHosts;
1062-
this.requestVolume = requestVolume;
1040+
public final int stdevFactor;
1041+
public final int enforcementPercentage;
1042+
public final int minimumHosts;
1043+
public final int requestVolume;
1044+
1045+
SuccessRateEjection(Builder builder) {
1046+
this.stdevFactor = builder.stdevFactor;
1047+
this.enforcementPercentage = builder.enforcementPercentage;
1048+
this.minimumHosts = builder.minimumHosts;
1049+
this.requestVolume = builder.requestVolume;
10631050
}
10641051

10651052
/** Builds new instances of {@link SuccessRateEjection}. */
10661053
public static final class Builder {
10671054

1068-
Integer stdevFactor = 1900;
1069-
Integer enforcementPercentage = 100;
1070-
Integer minimumHosts = 5;
1071-
Integer requestVolume = 100;
1055+
int stdevFactor = 1900;
1056+
int enforcementPercentage = 100;
1057+
int minimumHosts = 5;
1058+
int requestVolume = 100;
10721059

10731060
/** The product of this and the standard deviation of success rates determine the ejection
10741061
* threshold.
10751062
*/
1076-
public Builder setStdevFactor(Integer stdevFactor) {
1077-
checkArgument(stdevFactor != null);
1063+
public Builder setStdevFactor(int stdevFactor) {
10781064
this.stdevFactor = stdevFactor;
10791065
return this;
10801066
}
10811067

10821068
/** Only eject this percentage of outliers. */
1083-
public Builder setEnforcementPercentage(Integer enforcementPercentage) {
1084-
checkArgument(enforcementPercentage != null);
1069+
public Builder setEnforcementPercentage(int enforcementPercentage) {
10851070
checkArgument(enforcementPercentage >= 0 && enforcementPercentage <= 100);
10861071
this.enforcementPercentage = enforcementPercentage;
10871072
return this;
10881073
}
10891074

10901075
/** The minimum amount of hosts needed for success rate ejection. */
1091-
public Builder setMinimumHosts(Integer minimumHosts) {
1092-
checkArgument(minimumHosts != null);
1076+
public Builder setMinimumHosts(int minimumHosts) {
10931077
checkArgument(minimumHosts >= 0);
10941078
this.minimumHosts = minimumHosts;
10951079
return this;
10961080
}
10971081

10981082
/** The minimum address request volume to be considered for success rate ejection. */
1099-
public Builder setRequestVolume(Integer requestVolume) {
1100-
checkArgument(requestVolume != null);
1083+
public Builder setRequestVolume(int requestVolume) {
11011084
checkArgument(requestVolume >= 0);
11021085
this.requestVolume = requestVolume;
11031086
return this;
11041087
}
11051088

11061089
/** Builds a new instance of {@link SuccessRateEjection}. */
11071090
public SuccessRateEjection build() {
1108-
return new SuccessRateEjection(stdevFactor, enforcementPercentage, minimumHosts,
1109-
requestVolume);
1091+
return new SuccessRateEjection(this);
11101092
}
11111093
}
11121094
}
11131095

11141096
/** The configuration for failure percentage ejection. */
11151097
public static class FailurePercentageEjection {
1116-
public final Integer threshold;
1117-
public final Integer enforcementPercentage;
1118-
public final Integer minimumHosts;
1119-
public final Integer requestVolume;
1120-
1121-
FailurePercentageEjection(Integer threshold, Integer enforcementPercentage,
1122-
Integer minimumHosts, Integer requestVolume) {
1123-
this.threshold = threshold;
1124-
this.enforcementPercentage = enforcementPercentage;
1125-
this.minimumHosts = minimumHosts;
1126-
this.requestVolume = requestVolume;
1098+
public final int threshold;
1099+
public final int enforcementPercentage;
1100+
public final int minimumHosts;
1101+
public final int requestVolume;
1102+
1103+
FailurePercentageEjection(Builder builder) {
1104+
this.threshold = builder.threshold;
1105+
this.enforcementPercentage = builder.enforcementPercentage;
1106+
this.minimumHosts = builder.minimumHosts;
1107+
this.requestVolume = builder.requestVolume;
11271108
}
11281109

11291110
/** For building new {@link FailurePercentageEjection} instances. */
11301111
public static class Builder {
1131-
Integer threshold = 85;
1132-
Integer enforcementPercentage = 100;
1133-
Integer minimumHosts = 5;
1134-
Integer requestVolume = 50;
1112+
int threshold = 85;
1113+
int enforcementPercentage = 100;
1114+
int minimumHosts = 5;
1115+
int requestVolume = 50;
11351116

11361117
/** The failure percentage that will result in an address being considered an outlier. */
1137-
public Builder setThreshold(Integer threshold) {
1138-
checkArgument(threshold != null);
1118+
public Builder setThreshold(int threshold) {
11391119
checkArgument(threshold >= 0 && threshold <= 100);
11401120
this.threshold = threshold;
11411121
return this;
11421122
}
11431123

11441124
/** Only eject this percentage of outliers. */
1145-
public Builder setEnforcementPercentage(Integer enforcementPercentage) {
1146-
checkArgument(enforcementPercentage != null);
1125+
public Builder setEnforcementPercentage(int enforcementPercentage) {
11471126
checkArgument(enforcementPercentage >= 0 && enforcementPercentage <= 100);
11481127
this.enforcementPercentage = enforcementPercentage;
11491128
return this;
11501129
}
11511130

11521131
/** The minimum amount of host for failure percentage ejection to be enabled. */
1153-
public Builder setMinimumHosts(Integer minimumHosts) {
1154-
checkArgument(minimumHosts != null);
1132+
public Builder setMinimumHosts(int minimumHosts) {
11551133
checkArgument(minimumHosts >= 0);
11561134
this.minimumHosts = minimumHosts;
11571135
return this;
@@ -1161,17 +1139,15 @@ public Builder setMinimumHosts(Integer minimumHosts) {
11611139
* The request volume required for an address to be considered for failure percentage
11621140
* ejection.
11631141
*/
1164-
public Builder setRequestVolume(Integer requestVolume) {
1165-
checkArgument(requestVolume != null);
1142+
public Builder setRequestVolume(int requestVolume) {
11661143
checkArgument(requestVolume >= 0);
11671144
this.requestVolume = requestVolume;
11681145
return this;
11691146
}
11701147

11711148
/** Builds a new instance of {@link FailurePercentageEjection}. */
11721149
public FailurePercentageEjection build() {
1173-
return new FailurePercentageEjection(threshold, enforcementPercentage, minimumHosts,
1174-
requestVolume);
1150+
return new FailurePercentageEjection(this);
11751151
}
11761152
}
11771153
}

0 commit comments

Comments
 (0)