This is an automated email from the ASF dual-hosted git repository. lhotari pushed a commit to branch branch-4.0 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit fa8bbf4d53a42d4bed378110f8ca22bf1356bf79 Author: Lucas Eby <[email protected]> AuthorDate: Tue Nov 11 09:31:38 2025 -0600 [fix][test] Add Delta Tolerance in Double-Precision Assertions to Fix Rounding Flakiness (#24972) (cherry picked from commit bd9d81ddd71e91faa4fd4661798920437d8b164c) --- .../extensions/scheduler/TransferShedderTest.java | 133 +++++++++++---------- 1 file changed, 67 insertions(+), 66 deletions(-) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/scheduler/TransferShedderTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/scheduler/TransferShedderTest.java index e997eb36bab..716e1f2a2a2 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/scheduler/TransferShedderTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/scheduler/TransferShedderTest.java @@ -110,6 +110,7 @@ import org.testng.annotations.Test; public class TransferShedderTest { double setupLoadAvg = 0.36400000000000005; double setupLoadStd = 0.3982762860126121; + double delta = 1e-5; PulsarService pulsar; NamespaceService namespaceService; @@ -522,8 +523,8 @@ public class TransferShedderTest { var res = transferShedder.findBundlesForUnloading(ctx, Map.of(), Map.of()); assertTrue(res.isEmpty()); assertEquals(counter.getBreakdownCounters().get(Skip).get(NoBundles).get(), 1); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } @Test @@ -543,8 +544,8 @@ public class TransferShedderTest { var res = transferShedder.findBundlesForUnloading(ctx, Map.of(), Map.of()); assertTrue(res.isEmpty()); assertEquals(counter.getBreakdownCounters().get(Skip).get(NoLoadData).get(), 1); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } @Test @@ -587,8 +588,8 @@ public class TransferShedderTest { expected.add(new UnloadDecision(new Unload("broker4:8080", bundleD1, Optional.of("broker2:8080")), Success, Overloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); var now = System.currentTimeMillis(); recentlyUnloadedBrokers.put("broker1:8080", now); @@ -616,8 +617,8 @@ public class TransferShedderTest { Optional.of("broker1:8080")), Success, Overloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } @Test @@ -655,8 +656,8 @@ public class TransferShedderTest { expected.add(new UnloadDecision(new Unload("broker4:8080", bundleD1, Optional.of("broker1:8080")), Success, Overloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); // Test unload a has isolation policies broker. ctx.brokerConfiguration().setLoadBalancerTransferEnabled(false); @@ -666,8 +667,8 @@ public class TransferShedderTest { expected.add(new UnloadDecision(new Unload("broker4:8080", bundleD1, Optional.empty()), Success, Overloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); // test setLoadBalancerSheddingBundlesWithPoliciesEnabled=false; @@ -678,16 +679,16 @@ public class TransferShedderTest { res = transferShedder.findBundlesForUnloading(ctx, Map.of(), Map.of()); assertTrue(res.isEmpty()); assertEquals(counter.getBreakdownCounters().get(Skip).get(NoBundles).get(), 1); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); // Test unload a has isolation policies broker. ctx.brokerConfiguration().setLoadBalancerTransferEnabled(false); res = transferShedder.findBundlesForUnloading(ctx, Map.of(), Map.of()); assertTrue(res.isEmpty()); assertEquals(counter.getBreakdownCounters().get(Skip).get(NoBundles).get(), 2); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } public BrokerLookupData getLookupData() { @@ -769,8 +770,8 @@ public class TransferShedderTest { assertTrue(res.isEmpty()); assertEquals(counter.getBreakdownCounters().get(Skip).get(NoBundles).get(), 1); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); doAnswer(invocationOnMock -> { Map<String, BrokerLookupData> brokers = invocationOnMock.getArgument(0); @@ -787,8 +788,8 @@ public class TransferShedderTest { expected2.add(new UnloadDecision(new Unload("broker5:8080", bundleE1, Optional.of("broker1:8080")), Success, Overloaded)); assertEquals(res2, expected2); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } @Test @@ -818,8 +819,8 @@ public class TransferShedderTest { assertTrue(res.isEmpty()); assertEquals(counter.getBreakdownCounters().get(Skip).get(NoBundles).get(), 1); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } @Test @@ -881,8 +882,8 @@ public class TransferShedderTest { assertTrue(res.isEmpty()); assertEquals(counter.getBreakdownCounters().get(Skip).get(HitCount).get(), 1); - assertEquals(counter.getLoadAvg(), 0.2000000063578288); - assertEquals(counter.getLoadStd(), 0.08164966587949089); + assertEquals(counter.getLoadAvg(), 0.2000000063578288, delta); + assertEquals(counter.getLoadStd(), 0.08164966587949089, delta); } @Test @@ -900,8 +901,8 @@ public class TransferShedderTest { assertTrue(res.isEmpty()); assertEquals(counter.getBreakdownCounters().get(Skip).get(NoBundles).get(), 1); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } @Test @@ -922,8 +923,8 @@ public class TransferShedderTest { Optional.of("broker1:8080")), Success, Overloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } @Test @@ -942,8 +943,8 @@ public class TransferShedderTest { var res = transferShedder.findBundlesForUnloading(ctx, Map.of(), Map.of()); assertTrue(res.isEmpty()); assertEquals(counter.getBreakdownCounters().get(Skip).get(NoBundles).get(), 1); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } @@ -961,8 +962,8 @@ public class TransferShedderTest { expected.add(new UnloadDecision(new Unload("broker5:8080", bundleE1, Optional.of("broker1:8080")), Success, Overloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), 0.26400000000000007); - assertEquals(counter.getLoadStd(), 0.27644891028904417); + assertEquals(counter.getLoadAvg(), 0.26400000000000007, delta); + assertEquals(counter.getLoadStd(), 0.27644891028904417, delta); } @Test @@ -1013,12 +1014,12 @@ public class TransferShedderTest { expected.add(new UnloadDecision( new Unload("broker1:8080", "my-tenant/my-namespaceA/0x3FFFFFFF_0x4FFFFFFF", Optional.of("broker2:8080")), Success, Overloaded)); - assertEquals(counter.getLoadAvg(), 5.05); - assertEquals(counter.getLoadStd(), 4.95); + assertEquals(counter.getLoadAvg(), 5.05, delta); + assertEquals(counter.getLoadStd(), 4.95, delta); assertEquals(res, expected); var stats = (TransferShedder.LoadStats) FieldUtils.readDeclaredField(transferShedder, "stats", true); - assertEquals(stats.std(), 0.050000004900021836); + assertEquals(stats.std(), 0.050000004900021836, delta); } @Test @@ -1084,12 +1085,12 @@ public class TransferShedderTest { new Unload("broker2:8080", "my-tenant/my-namespaceB/0x00000000_0x0FFFFFFF", Optional.of("broker1:8080")), Success, Overloaded)); - assertEquals(counter.getLoadAvg(), 5.05); - assertEquals(counter.getLoadStd(), 4.95); + assertEquals(counter.getLoadAvg(), 5.05, delta); + assertEquals(counter.getLoadStd(), 4.95, delta); assertEquals(res, expected); var stats = (TransferShedder.LoadStats) FieldUtils.readDeclaredField(transferShedder, "stats", true); - assertEquals(stats.std(), 0.050000004900021836); + assertEquals(stats.std(), 0.050000004900021836, delta); } @@ -1123,19 +1124,19 @@ public class TransferShedderTest { expected.add(new UnloadDecision( new Unload("broker1:8080", res.stream().filter(x -> x.getUnload().sourceBroker().equals("broker1:8080")).findFirst().get() - .getUnload().serviceUnit(), Optional.of("broker2:8080")), + .getUnload().serviceUnit(), Optional.of("broker2:8080")), Success, Overloaded)); expected.add(new UnloadDecision( new Unload("broker2:8080", res.stream().filter(x -> x.getUnload().sourceBroker().equals("broker2:8080")).findFirst().get() .getUnload().serviceUnit(), Optional.of("broker1:8080")), Success, Overloaded)); - assertEquals(counter.getLoadAvg(), 0.74); - assertEquals(counter.getLoadStd(), 0.26); + assertEquals(counter.getLoadAvg(), 0.74, delta); + assertEquals(counter.getLoadStd(), 0.26, delta); assertEquals(res, expected); var stats = (TransferShedder.LoadStats) FieldUtils.readDeclaredField(transferShedder, "stats", true); - assertEquals(stats.std(), 2.5809568279517847E-8); + assertEquals(stats.std(), 2.5809568279517847E-8, delta); } @Test @@ -1161,8 +1162,8 @@ public class TransferShedderTest { expected.add(new UnloadDecision(new Unload("broker4:8080", bundleD1, Optional.of("broker2:8080")), Success, Underloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), 0.26400000000000007); - assertEquals(counter.getLoadStd(), 0.27644891028904417); + assertEquals(counter.getLoadAvg(), 0.26400000000000007, delta); + assertEquals(counter.getLoadStd(), 0.27644891028904417, delta); } @Test @@ -1185,8 +1186,8 @@ public class TransferShedderTest { expected.add(new UnloadDecision(new Unload("broker4:8080", bundleD1, Optional.of("broker2:8080")), Success, Underloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), 0.262); - assertEquals(counter.getLoadStd(), 0.2780935094532054); + assertEquals(counter.getLoadAvg(), 0.262, delta); + assertEquals(counter.getLoadStd(), 0.2780935094532054, delta); } @Test @@ -1203,8 +1204,8 @@ public class TransferShedderTest { expected.add(new UnloadDecision(new Unload("broker4:8080", bundleD1, Optional.of("broker2:8080")), Success, Overloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } @Test @@ -1219,8 +1220,8 @@ public class TransferShedderTest { var res = transferShedder.findBundlesForUnloading(ctx, Map.of(), Map.of()); assertTrue(res.isEmpty()); assertEquals(counter.getBreakdownCounters().get(Skip).get(HitCount).get(), i + 1); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } var res = transferShedder.findBundlesForUnloading(ctx, Map.of(), Map.of()); var expected = new HashSet<UnloadDecision>(); @@ -1229,8 +1230,8 @@ public class TransferShedderTest { expected.add(new UnloadDecision(new Unload("broker4:8080", bundleD1, Optional.of("broker2:8080")), Success, Overloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } @Test @@ -1249,8 +1250,8 @@ public class TransferShedderTest { expected.add(new UnloadDecision(new Unload("broker4:8080", bundleD1, Optional.of("broker2:8080")), Success, Overloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), setupLoadAvg); - assertEquals(counter.getLoadStd(), setupLoadStd); + assertEquals(counter.getLoadAvg(), setupLoadAvg, delta); + assertEquals(counter.getLoadStd(), setupLoadStd, delta); } @Test @@ -1270,14 +1271,14 @@ public class TransferShedderTest { expected.add(new UnloadDecision(new Unload("broker4:8080", bundleD1, Optional.of("broker2:8080")), Success, Overloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), 2.4240000000000004); - assertEquals(counter.getLoadStd(), 3.8633332758124816); + assertEquals(counter.getLoadAvg(), 2.4240000000000004, delta); + assertEquals(counter.getLoadStd(), 3.8633332758124816, delta); var stats = (TransferShedder.LoadStats) FieldUtils.readDeclaredField(transferShedder, "stats", true); - assertEquals(stats.avg(), 2.4240000000000004); - assertEquals(stats.std(), 2.781643776903451); + assertEquals(stats.avg(), 2.4240000000000004, delta); + assertEquals(stats.std(), 2.781643776903451, delta); } @Test @@ -1309,8 +1310,8 @@ public class TransferShedderTest { new Unload("broker99:8080", "my-tenant/my-namespace99/0x00000000_0x0FFFFFFF", Optional.of("broker83:8080")), Success, Underloaded)) ); - assertEquals(counter.getLoadAvg(), 0.019900000000000008, 0.00001); - assertEquals(counter.getLoadStd(), 0.09850375627355534, 0.00001); + assertEquals(counter.getLoadAvg(), 0.019900000000000008, delta); + assertEquals(counter.getLoadStd(), 0.09850375627355534, delta); } @Test @@ -1324,8 +1325,8 @@ public class TransferShedderTest { new Unload("broker98:8080", "my-tenant/my-namespace98/0x00000000_0x0FFFFFFF", Optional.of("broker99:8080")), Success, Underloaded)); assertEquals(res, expected); - assertEquals(counter.getLoadAvg(), 0.9704000000000005, 0.00001); - assertEquals(counter.getLoadStd(), 0.09652895938523735, 0.00001); + assertEquals(counter.getLoadAvg(), 0.9704000000000005, delta); + assertEquals(counter.getLoadStd(), 0.09652895938523735, delta); } @Test @@ -1387,8 +1388,8 @@ public class TransferShedderTest { } stats.update(loadStore, availableBrokers, Map.of(), conf); - assertEquals(stats.avg(), 0.9417647058823528); - assertEquals(stats.std(), 0.23294117647058868); + assertEquals(stats.avg(), 0.9417647058823528, delta); + assertEquals(stats.std(), 0.23294117647058868, delta); } @Test @@ -1405,7 +1406,7 @@ public class TransferShedderTest { loadStore.pushAsync("broker" + i + ":8080", getCpuLoad(ctx, loads[i], "broker" + i + ":8080")); } stats.update(loadStore, availableBrokers, Map.of(), conf); - assertEquals(stats.avg(), 3.9449999999999994); - assertEquals(stats.std(), 0.028722813232795824); + assertEquals(stats.avg(), 3.9449999999999994, delta); + assertEquals(stats.std(), 0.028722813232795824, delta); } }
