Skip to content

[fast-client] Fix 3 fast client bugs where CompletableFutures are never completed #10115

[fast-client] Fix 3 fast client bugs where CompletableFutures are never completed

[fast-client] Fix 3 fast client bugs where CompletableFutures are never completed #10115

Triggered via pull request February 12, 2026 10:12
Status Success
Total duration 12m 40s
Artifacts 19
Matrix: Clients / UT & CodeCov
Matrix: Controller / UT & CodeCov
Matrix: Integrations / UT & CodeCov
Matrix: Internal / UT & CodeCov
Matrix: Router / UT & CodeCov
Matrix: Server / UT & CodeCov
Matrix: StaticAnalysis
ValidateGradleWrapper
14s
ValidateGradleWrapper
StaticAnalysisAndUnitTestsFailureAlert
0s
StaticAnalysisAndUnitTestsFailureAlert
Fit to window
Zoom out
Zoom in

Annotations

10 errors
LeakedPushStatusCleanUpServiceTest.testLeakedZKNodeShouldBeDeleted: services/venice-controller/src/test/java/com/linkedin/venice/pushmonitor/LeakedPushStatusCleanUpServiceTest.java#L95
org.mockito.exceptions.verification.ArgumentsAreDifferent: Argument(s) are different! Wanted: offlinePushAccessor.deleteOfflinePushStatusAndItsPartitionStatuses( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpServiceTest.testLeakedZKNodeShouldBeDeleted(LeakedPushStatusCleanUpServiceTest.java:95) Actual invocations have different arguments: offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:129) offlinePushAccessor.getOfflinePushStatusCreationTime( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:152) offlinePushAccessor.deleteOfflinePushStatusAndItsPartitionStatuses( "test_store_v1" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.lambda$run$1(LeakedPushStatusCleanUpService.java:183) offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:129) offlinePushAccessor.getOfflinePushStatusCreationTime( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:152) offlinePushAccessor.deleteOfflinePushStatusAndItsPartitionStatuses( "test_store_v1" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.lambda$run$1(LeakedPushStatusCleanUpService.java:183) offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:129) offlinePushAccessor.getOfflinePushStatusCreationTime( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:152) offlinePushAccessor.deleteOfflinePushStatusAndItsPartitionStatuses( "test_store_v1" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.lambda$run$1(LeakedPushStatusCleanUpService.java:183) offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:129) offlinePushAccessor.getOfflinePushStatusCreationTime( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:152) offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:129) offlinePushAccessor.getOfflinePushStatusCreationTime( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:152) offlinePushAccessor.deleteOfflinePushStatusAndItsPartitionStatuses( "test_store_v1" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.lambda$run$1(LeakedPushStatusCleanUpService.java:183) offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:129) offlinePushAccessor.getOfflinePushStatusCreationTime( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:152) offlinePushAccessor.deleteOfflinePushStatusAndItsPartitionStatuses( "test_store_v1" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.lambda$run$1(LeakedPushStatusCleanUpService.java:183) offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushSta
LeakedPushStatusCleanUpServiceTest.testLeakedZKNodeShouldBeDeleted: services/venice-controller/src/test/java/com/linkedin/venice/pushmonitor/LeakedPushStatusCleanUpServiceTest.java#L95
org.mockito.exceptions.verification.ArgumentsAreDifferent: Argument(s) are different! Wanted: offlinePushAccessor.deleteOfflinePushStatusAndItsPartitionStatuses( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpServiceTest.testLeakedZKNodeShouldBeDeleted(LeakedPushStatusCleanUpServiceTest.java:95) Actual invocations have different arguments: offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:129) offlinePushAccessor.getOfflinePushStatusCreationTime( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:152) offlinePushAccessor.deleteOfflinePushStatusAndItsPartitionStatuses( "test_store_v1" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.lambda$run$1(LeakedPushStatusCleanUpService.java:183) offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:129) offlinePushAccessor.getOfflinePushStatusCreationTime( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:152) offlinePushAccessor.deleteOfflinePushStatusAndItsPartitionStatuses( "test_store_v1" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.lambda$run$1(LeakedPushStatusCleanUpService.java:183) offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:129) offlinePushAccessor.getOfflinePushStatusCreationTime( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:152) offlinePushAccessor.deleteOfflinePushStatusAndItsPartitionStatuses( "test_store_v1" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.lambda$run$1(LeakedPushStatusCleanUpService.java:183) offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:129) offlinePushAccessor.getOfflinePushStatusCreationTime( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:152) offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:129) offlinePushAccessor.getOfflinePushStatusCreationTime( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:152) offlinePushAccessor.deleteOfflinePushStatusAndItsPartitionStatuses( "test_store_v1" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.lambda$run$1(LeakedPushStatusCleanUpService.java:183) offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:129) offlinePushAccessor.getOfflinePushStatusCreationTime( "test_store_v2" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.run(LeakedPushStatusCleanUpService.java:152) offlinePushAccessor.deleteOfflinePushStatusAndItsPartitionStatuses( "test_store_v1" ); -> at com.linkedin.venice.pushmonitor.LeakedPushStatusCleanUpService$PushStatusCleanUpTask.lambda$run$1(LeakedPushStatusCleanUpService.java:183) offlinePushAccessor.loadOfflinePushStatusPaths( ); -> at com.linkedin.venice.pushmonitor.LeakedPushSta
InstanceSizeEstimatorTest.testInstanceMeasurement: internal/venice-common/src/test/java/com/linkedin/venice/memory/InstanceSizeEstimatorTest.java#L49
java.lang.AssertionError: Class KafkaKey has a memoryAllocatedPerInstance (37.3766) which is too far from the predictedUsage (40); delta: 0.066; maxAllowedDelta: 0.027. No more attempts left.
InstanceSizeEstimatorTest.testInstanceMeasurement: internal/venice-common/src/test/java/com/linkedin/venice/memory/InstanceSizeEstimatorTest.java#L49
java.lang.AssertionError: Class KafkaKey has a memoryAllocatedPerInstance (37.3766) which is too far from the predictedUsage (40); delta: 0.066; maxAllowedDelta: 0.027. No more attempts left.
SITWithPWiseAndBufferAfterLeaderTest.methodSetUp: clients/da-vinci-client/src/test/java/com/linkedin/davinci/kafka/consumer/SITWithPWiseAndBufferAfterLeaderTest.java#L1
org.mockito.exceptions.misusing.UnfinishedVerificationException: Missing method call for verify(mock) here: -> at com.linkedin.davinci.stats.AggKafkaConsumerServiceStats.recordTotalUpdateCurrentAssignmentLatency(AggKafkaConsumerServiceStats.java:68) Example of correct verification: verify(mock).doSomething() Also, this error might show up because you verify either of: final/private/equals()/hashCode() methods. Those methods *cannot* be stubbed/verified. Mocking methods declared on non-public parent classes is not supported.
SITWithPWiseAndBufferAfterLeaderTest.testVeniceMessagesProcessingWithSortedInputWithBlobMode[2](false, true): clients/da-vinci-client/src/test/java/com/linkedin/davinci/kafka/consumer/SITWithPWiseAndBufferAfterLeaderTest.java#L1
org.mockito.exceptions.misusing.CannotStubVoidMethodWithReturnValue: 'put' is a *void method* and it *cannot* be stubbed with a *return value*! Voids are usually stubbed with Throwables: doThrow(exception).when(mock).someVoidMethod(); If you need to set the void method to do nothing you can use: doNothing().when(mock).someVoidMethod(); For more information, check out the javadocs for Mockito.doNothing(). *** If you're unsure why you're getting above error read on. Due to the nature of the syntax above problem might occur because: 1. The method you are trying to stub is *overloaded*. Make sure you are calling the right overloaded version. 2. Somewhere in your test you are stubbing *final methods*. Sorry, Mockito does not verify/stub final methods. 3. A spy is stubbed using when(spy.foo()).then() syntax. It is safer to stub spies - - with doReturn|Throw() family of methods. More in javadocs for Mockito.spy() method. 4. Mocking methods declared on non-public parent classes is not supported.
SITWithPWiseAndBufferAfterLeaderTest.methodSetUp: clients/da-vinci-client/src/test/java/com/linkedin/davinci/kafka/consumer/SITWithPWiseAndBufferAfterLeaderTest.java#L1
org.mockito.exceptions.misusing.UnfinishedVerificationException: Missing method call for verify(mock) here: -> at com.linkedin.davinci.stats.AggKafkaConsumerServiceStats.recordTotalUpdateCurrentAssignmentLatency(AggKafkaConsumerServiceStats.java:68) Example of correct verification: verify(mock).doSomething() Also, this error might show up because you verify either of: final/private/equals()/hashCode() methods. Those methods *cannot* be stubbed/verified. Mocking methods declared on non-public parent classes is not supported.
SITWithPWiseAndBufferAfterLeaderTest.testVeniceMessagesProcessingWithSortedInputWithBlobMode[2](false, true): clients/da-vinci-client/src/test/java/com/linkedin/davinci/kafka/consumer/SITWithPWiseAndBufferAfterLeaderTest.java#L1
org.mockito.exceptions.misusing.CannotStubVoidMethodWithReturnValue: 'put' is a *void method* and it *cannot* be stubbed with a *return value*! Voids are usually stubbed with Throwables: doThrow(exception).when(mock).someVoidMethod(); If you need to set the void method to do nothing you can use: doNothing().when(mock).someVoidMethod(); For more information, check out the javadocs for Mockito.doNothing(). *** If you're unsure why you're getting above error read on. Due to the nature of the syntax above problem might occur because: 1. The method you are trying to stub is *overloaded*. Make sure you are calling the right overloaded version. 2. Somewhere in your test you are stubbing *final methods*. Sorry, Mockito does not verify/stub final methods. 3. A spy is stubbed using when(spy.foo()).then() syntax. It is safer to stub spies - - with doReturn|Throw() family of methods. More in javadocs for Mockito.spy() method. 4. Mocking methods declared on non-public parent classes is not supported.

Artifacts

Produced during runtime
Name Size Digest
StaticAnalysis
927 KB
sha256:08fb76c40862d0cfc23ac80e43adbc4b7fe6ce1550f89bede925e98eb9bcdfda
clients-jdk11
3.22 MB
sha256:f23cc28488e3a83c1dc13b379f02bcf7805bccb1d77e932f065b721ad9fa004d
clients-jdk17
3.24 MB
sha256:bf53597807985c4591b180a97a8736ff625bcaa44384a7e0685a78807df9cfaa
clients-jdk8
3.2 MB
sha256:35366c89313d854a9920607e576c8c376adf2d47f9f6e37c64c7c3ef45968f1f
controller-jdk11
1.97 MB
sha256:071c2554c3bce2b40986d5aaffab0397768000e8d551dd6daf5d547a229e9de6
controller-jdk17
1.96 MB
sha256:a9c05aaaedbe18a9fec07a543b140be61380abd5764271586e258497da9caf8e
controller-jdk8
1.99 MB
sha256:b87693e8fce7169ac42fb6e7b9fa463dce5e8c58fd0d995d3bc20fa9da8cfbae
integrations-jdk11
550 KB
sha256:0b832ceeccd103d33434a6670e6369c4b935e8d618f7a8572edcfc79a8715949
integrations-jdk17
554 KB
sha256:e0bf5d989a054d0e88192bb0d2c6cbbb0a5fc8032788789b82424ab339f004cb
integrations-jdk8
539 KB
sha256:266c9d655d75958e3bcd3ac17b3a8aaef33705a211c59c0ad5258eb006da886e
internal-jdk11
4.26 MB
sha256:235bee82fbb362b0051a24f2a4a48cb2b8cd7b8a826821b95381a55827d76558
internal-jdk17
4.27 MB
sha256:41d17a9a7bcdf846ea442b2cd3e953c581ac94a8e961993781a74aa3731d3a58
internal-jdk8
4.25 MB
sha256:0a44f25086984fb3e0766ad7b3c72c6b186ca8d1fd88c127f30ad104bfed441d
router-jdk11
757 KB
sha256:eb6f5afcac3db8ccce28aeabdb852d73a7b6d36a8b55bea3948c05457c8e1efd
router-jdk17
767 KB
sha256:f2f6529c248f3f2d67e00d53636685ca4cdf2f6977f3f4aaacb1bbbcac2b3ebb
router-jdk8
750 KB
sha256:0e67ec2517db72e57c079b363c8fb99c6787e8b5b2f4d1328cafe063abb8d2f0
server-jdk11
11.7 MB
sha256:50970f2102e6c4fe6265e29b621aab9d3a0f2c6fb6589b4a9d89d92de498447f
server-jdk17
10.4 MB
sha256:1c805d26566cd33a77fa2b2969f7d71e81247d8c014696189694744121b2deb9
server-jdk8
10.1 MB
sha256:9244e6224fda451d1782d8aa302c7671ef5073d222b204b94c96fc46a37c409d