Skip to content

Commit 68f7ebf

Browse files
committed
Fixup #12724: Share fractional matcher parser
1 parent a50bc56 commit 68f7ebf

File tree

1 file changed

+6
-26
lines changed

1 file changed

+6
-26
lines changed

xds/src/main/java/io/grpc/xds/XdsRouteConfigureResource.java

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import io.envoyproxy.envoy.config.route.v3.ClusterSpecifierPlugin;
3737
import io.envoyproxy.envoy.config.route.v3.RetryPolicy.RetryBackOff;
3838
import io.envoyproxy.envoy.config.route.v3.RouteConfiguration;
39-
import io.envoyproxy.envoy.type.v3.FractionalPercent;
4039
import io.grpc.Status;
4140
import io.grpc.internal.GrpcUtil;
4241
import io.grpc.xds.ClusterSpecifierPlugin.NamedPluginConfig;
@@ -336,12 +335,12 @@ static StructOrError<RouteMatch> parseRouteMatch(
336335

337336
FractionMatcher fractionMatch = null;
338337
if (proto.hasRuntimeFraction()) {
339-
StructOrError<FractionMatcher> parsedFraction =
340-
parseFractionMatcher(proto.getRuntimeFraction().getDefaultValue());
341-
if (parsedFraction.getErrorDetail() != null) {
342-
return StructOrError.fromError(parsedFraction.getErrorDetail());
338+
try {
339+
fractionMatch =
340+
MatcherParser.parseFractionMatcher(proto.getRuntimeFraction().getDefaultValue());
341+
} catch (IllegalArgumentException e) {
342+
return StructOrError.fromError(e.getMessage());
343343
}
344-
fractionMatch = parsedFraction.getStruct();
345344
}
346345

347346
List<HeaderMatcher> headerMatchers = new ArrayList<>();
@@ -382,26 +381,7 @@ static StructOrError<PathMatcher> parsePathMatcher(
382381
}
383382
}
384383

385-
private static StructOrError<FractionMatcher> parseFractionMatcher(FractionalPercent proto) {
386-
int numerator = proto.getNumerator();
387-
int denominator = 0;
388-
switch (proto.getDenominator()) {
389-
case HUNDRED:
390-
denominator = 100;
391-
break;
392-
case TEN_THOUSAND:
393-
denominator = 10_000;
394-
break;
395-
case MILLION:
396-
denominator = 1_000_000;
397-
break;
398-
case UNRECOGNIZED:
399-
default:
400-
return StructOrError.fromError(
401-
"Unrecognized fractional percent denominator: " + proto.getDenominator());
402-
}
403-
return StructOrError.fromStruct(FractionMatcher.create(numerator, denominator));
404-
}
384+
405385

406386
@VisibleForTesting
407387
static StructOrError<HeaderMatcher> parseHeaderMatcher(

0 commit comments

Comments
 (0)