@@ -724,6 +724,35 @@ public void successRateTwoOutliers() {
724724 ImmutableSet .of (servers .get (1 ).getAddresses ().get (0 ))));
725725 }
726726
727+ /**
728+ * Two outliers get ejected with default stdevFactor.
729+ */
730+ @ Test
731+ public void successRateTwoOutliersWithDefaultStdevFactor () {
732+ OutlierDetectionLoadBalancerConfig config = new OutlierDetectionLoadBalancerConfig .Builder ()
733+ .setMaxEjectionPercent (50 )
734+ .setSuccessRateEjection (
735+ // Default stdevFactor results in negative requiredSuccessRate,
736+ // but always failing endpoints still get ejected.
737+ new SuccessRateEjection .Builder ()
738+ .setMinimumHosts (3 )
739+ .setRequestVolume (10 ).build ())
740+ .setChildConfig (newChildConfig (roundRobinLbProvider , null )).build ();
741+
742+ loadBalancer .acceptResolvedAddresses (buildResolvedAddress (config , servers ));
743+
744+ generateLoad (ImmutableMap .of (
745+ subchannel1 , Status .DEADLINE_EXCEEDED ,
746+ subchannel2 , Status .DEADLINE_EXCEEDED ), 7 );
747+
748+ // Move forward in time to a point where the detection timer has fired.
749+ forwardTime (config );
750+
751+ // The one subchannel that was returning errors should be ejected.
752+ assertEjectedSubchannels (ImmutableSet .of (ImmutableSet .of (servers .get (0 ).getAddresses ().get (0 )),
753+ ImmutableSet .of (servers .get (1 ).getAddresses ().get (0 ))));
754+ }
755+
727756 /**
728757 * Three outliers, second one ejected even if ejecting it goes above the max ejection percentage,
729758 * as this matches Envoy behavior. The third one should not get ejected.
0 commit comments