Skip to content

Commit f417885

Browse files
committed
[KYUUBI #4865] Fix flaky test BackendServiceMetricSuite
### _Why are the changes needed?_ Wrap assertion w/ `eventually` to address the flaky test. ### _How was this patch tested?_ - [ ] Add some test cases that check the changes thoroughly including negative and positive cases if possible - [ ] Add screenshots for manual tests if appropriate - [x] [Run test](https://kyuubi.readthedocs.io/en/master/develop_tools/testing.html#running-tests) locally before make a pull request Closes #4865 from pan3793/flaky-test-2. Closes #4865 d582d57 [Cheng Pan] Fix flaky test BackendServiceMetricSuite Authored-by: Cheng Pan <[email protected]> Signed-off-by: Cheng Pan <[email protected]>
1 parent 4e32c3e commit f417885

File tree

1 file changed

+31
-32
lines changed

1 file changed

+31
-32
lines changed

kyuubi-server/src/test/scala/org/apache/kyuubi/server/BackendServiceMetricSuite.scala

+31-32
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@ import java.nio.file.{Path, Paths}
2121
import java.time.Duration
2222

2323
import com.fasterxml.jackson.databind.ObjectMapper
24+
import org.scalatest.time.SpanSugar.convertIntToGrainOfTime
2425

2526
import org.apache.kyuubi.{Utils, WithKyuubiServer}
2627
import org.apache.kyuubi.config.KyuubiConf
27-
import org.apache.kyuubi.metrics.{MetricsConf, MetricsConstants}
28+
import org.apache.kyuubi.metrics.MetricsConf
29+
import org.apache.kyuubi.metrics.MetricsConstants._
2830
import org.apache.kyuubi.operation.HiveJDBCTestHelper
2931

3032
class BackendServiceMetricSuite extends WithKyuubiServer with HiveJDBCTestHelper {
@@ -45,43 +47,40 @@ class BackendServiceMetricSuite extends WithKyuubiServer with HiveJDBCTestHelper
4547
withJdbcStatement() { statement =>
4648
statement.executeQuery("CREATE TABLE stu_test(id int, name string) USING parquet")
4749
statement.execute("insert into stu_test values(1, 'a'), (2, 'b'), (3, 'c')")
48-
Thread.sleep(Duration.ofMillis(111).toMillis)
50+
val logRows1 = eventually(timeout(10.seconds), interval(1.second)) {
51+
val res = objMapper.readTree(Paths.get(reportPath.toString, "report.json").toFile)
52+
assert(res.has("timers"))
53+
val timer = res.get("timers")
54+
assert(timer.get(BS_EXECUTE_STATEMENT).get("count").asInt() == 2)
55+
assert(timer.get(BS_EXECUTE_STATEMENT).get("mean").asDouble() > 0)
4956

50-
val res1 = objMapper.readTree(Paths.get(reportPath.toString, "report.json").toFile)
51-
assert(res1.has("timers"))
52-
val timer1 = res1.get("timers")
53-
assert(
54-
timer1.get(MetricsConstants.BS_EXECUTE_STATEMENT).get("count").asInt() == 2)
55-
assert(
56-
timer1.get(MetricsConstants.BS_EXECUTE_STATEMENT).get("mean").asDouble() > 0)
57-
58-
assert(res1.has("meters"))
59-
val meters1 = res1.get("meters")
60-
val logRows1 = meters1.get(MetricsConstants.BS_FETCH_LOG_ROWS_RATE).get("count").asInt()
61-
assert(logRows1 > 0)
57+
assert(res.has("meters"))
58+
val meters = res.get("meters")
59+
val logRows = meters.get(BS_FETCH_LOG_ROWS_RATE).get("count").asInt()
60+
assert(logRows > 0)
61+
logRows
62+
}
6263

6364
statement.execute("select * from stu_test limit 2")
6465
statement.getResultSet.next()
65-
Thread.sleep(Duration.ofMillis(111).toMillis)
66-
67-
val res2 = objMapper.readTree(Paths.get(reportPath.toString, "report.json").toFile)
68-
val timer2 = res2.get("timers")
69-
assert(
70-
timer2.get(MetricsConstants.BS_OPEN_SESSION).get("count").asInt() == 1)
71-
assert(
72-
timer2.get(MetricsConstants.BS_OPEN_SESSION).get("min").asInt() > 0)
73-
val execStatementNode2 = timer2.get(MetricsConstants.BS_EXECUTE_STATEMENT)
74-
assert(execStatementNode2.get("count").asInt() == 3)
75-
assert(
76-
execStatementNode2.get("max").asDouble() >= execStatementNode2.get("mean").asDouble() &&
77-
execStatementNode2.get("mean").asDouble() >= execStatementNode2.get("min").asDouble())
66+
eventually(timeout(60.seconds), interval(1.second)) {
67+
val res = objMapper.readTree(Paths.get(reportPath.toString, "report.json").toFile)
68+
val timer = res.get("timers")
69+
assert(timer.get(BS_OPEN_SESSION).get("count").asInt() == 1)
70+
assert(timer.get(BS_OPEN_SESSION).get("min").asInt() > 0)
71+
val execStatementNode = timer.get(BS_EXECUTE_STATEMENT)
72+
assert(execStatementNode.get("count").asInt() == 3)
73+
assert(
74+
execStatementNode.get("max").asDouble() >= execStatementNode.get("mean").asDouble() &&
75+
execStatementNode.get("mean").asDouble() >= execStatementNode.get("min").asDouble())
7876

79-
val meters2 =
80-
objMapper.readTree(Paths.get(reportPath.toString, "report.json").toFile).get("meters")
81-
assert(meters2.get(MetricsConstants.BS_FETCH_RESULT_ROWS_RATE).get("count").asInt() == 8)
82-
assert(meters2.get(MetricsConstants.BS_FETCH_LOG_ROWS_RATE).get("count").asInt() >= logRows1)
77+
val meters =
78+
objMapper.readTree(Paths.get(reportPath.toString, "report.json").toFile).get("meters")
79+
assert(meters.get(BS_FETCH_RESULT_ROWS_RATE).get("count").asInt() == 8)
80+
assert(meters.get(BS_FETCH_LOG_ROWS_RATE).get("count").asInt() >= logRows1)
8381

84-
statement.executeQuery("DROP TABLE stu_test")
82+
statement.executeQuery("DROP TABLE stu_test")
83+
}
8584
}
8685
}
8786
}

0 commit comments

Comments
 (0)