[ https://issues.apache.org/jira/browse/KAFKA-16640?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17943638#comment-17943638 ]
Vladimir Bukhtoyarov edited comment on KAFKA-16640 at 4/11/25 5:18 PM: ----------------------------------------------------------------------- [~frankvicky] *Using* does not re-throw exception that happens inside lamda, if {*}get{*}(or similar) is not called. This pull-request [https://github.com/apache/kafka/pull/15881/files] breaks all tests that it affects(about 13 tests). For example this test passes despite fact that 5*5 != 5 {code:java} @Timeout(60) class CoordinatorLoaderImplTest { @Test def testNonexistentPartition(): Unit = { val tp = new TopicPartition("foo", 0) val replicaManager = mock(classOf[ReplicaManager]) val serde = mock(classOf[Deserializer[(String, String)]]) val coordinator = mock(classOf[CoordinatorPlayback[(String, String)]]) Using(new CoordinatorLoaderImpl[(String, String)]( time = Time.SYSTEM, replicaManager = replicaManager, deserializer = serde, loadBufferSize = 1000 )) { loader => assertTrue(2*2 == 5) when(replicaManager.getLog(tp)).thenReturn(None) val result = loader.load(tp, coordinator) assertFutureThrows(result, classOf[NotLeaderOrFollowerException]) } } {code} To make this test working it needs to interact with Try like bellow {code:java} Using(new CoordinatorLoaderImpl[(String, String)]( time = Time.SYSTEM, replicaManager = replicaManager, deserializer = serde, loadBufferSize = 1000 )) { loader => assertTrue(2*2 == 5) when(replicaManager.getLog(tp)).thenReturn(None) val result = loader.load(tp, coordinator) assertFutureThrows(result, classOf[NotLeaderOrFollowerException]) }.get // call get to rethrow exception {code} was (Author: vladimir.bukhtoyarov): [~frankvicky] *Using* does not re-throw exception that happens inside lamda, if {*}get{*}(or similar) is not called. This pull-request [https://github.com/apache/kafka/pull/15881/files] breaks all tests that it affects(about 13 tests). For example this test passes despite fact that 5*5 != 5 {code:java} Using(new CoordinatorLoaderImpl[(String, String)]( time = Time.SYSTEM, replicaManager = replicaManager, deserializer = serde, loadBufferSize = 1000 )) { loader => assertTrue(2*2 == 5) when(replicaManager.getLog(tp)).thenReturn(None) val result = loader.load(tp, coordinator) assertFutureThrows(result, classOf[NotLeaderOrFollowerException]) } {code} To make this test working it needs to interact with Try like bellow {code:java} Using(new CoordinatorLoaderImpl[(String, String)]( time = Time.SYSTEM, replicaManager = replicaManager, deserializer = serde, loadBufferSize = 1000 )) { loader => assertTrue(2*2 == 5) when(replicaManager.getLog(tp)).thenReturn(None) val result = loader.load(tp, coordinator) assertFutureThrows(result, classOf[NotLeaderOrFollowerException]) }.get // call get to rethrow exception {code} > Replace TestUtils#resource by scala.util.Using > ---------------------------------------------- > > Key: KAFKA-16640 > URL: https://issues.apache.org/jira/browse/KAFKA-16640 > Project: Kafka > Issue Type: Improvement > Reporter: Chia-Ping Tsai > Assignee: TengYao Chi > Priority: Minor > Fix For: 3.8.0 > > > `scala.util.Using` is in both scala 2.13 and scala-collection-compat so we > don't need to have custom try-resource function. -- This message was sent by Atlassian Jira (v8.20.10#820010)