Fix connection pool timeouts unit (#7404)
And add a test that actually verifies it
This commit is contained in:
parent
d1c0b3d47e
commit
9e5d9623c3
|
@ -108,7 +108,7 @@ public final class DbConnectionPoolMetrics {
|
|||
public LongCounter connectionTimeouts() {
|
||||
return meter
|
||||
.counterBuilder("db.client.connections.timeouts")
|
||||
.setUnit("timeouts")
|
||||
.setUnit("{timeouts}")
|
||||
.setDescription(
|
||||
"The number of connection timeouts that have occurred trying to obtain a connection from the pool.")
|
||||
.build();
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.hikaricp;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.catchException;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.Mockito.atLeastOnce;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
@ -53,6 +55,8 @@ public abstract class AbstractHikariInstrumentationTest {
|
|||
hikariDataSource.setDataSource(dataSourceMock);
|
||||
configure(hikariDataSource, null);
|
||||
|
||||
cleanup.deferCleanup(hikariDataSource);
|
||||
|
||||
// when
|
||||
Connection hikariConnection = hikariDataSource.getConnection();
|
||||
TimeUnit.MILLISECONDS.sleep(100);
|
||||
|
@ -126,4 +130,38 @@ public abstract class AbstractHikariInstrumentationTest {
|
|||
verify(userMetricsMock, atLeastOnce()).recordConnectionAcquiredNanos(anyLong());
|
||||
verify(userMetricsMock, atLeastOnce()).recordConnectionUsageMillis(anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReportTimeouts() throws SQLException {
|
||||
// given
|
||||
when(dataSourceMock.getConnection())
|
||||
.then(
|
||||
invocation -> {
|
||||
TimeUnit.MILLISECONDS.sleep(2_000);
|
||||
throw new SQLException("timed out!");
|
||||
});
|
||||
|
||||
HikariDataSource hikariDataSource = new HikariDataSource();
|
||||
hikariDataSource.setPoolName("timingOutPool");
|
||||
hikariDataSource.setDataSource(dataSourceMock);
|
||||
hikariDataSource.setConnectionTimeout(250 /* millis */);
|
||||
// start the pool without initializing connections
|
||||
hikariDataSource.setInitializationFailTimeout(-1);
|
||||
configure(hikariDataSource, null);
|
||||
|
||||
cleanup.deferCleanup(hikariDataSource);
|
||||
|
||||
// when
|
||||
Exception thrown = catchException(hikariDataSource::getConnection);
|
||||
|
||||
// then
|
||||
assertThat(thrown).isNotNull();
|
||||
|
||||
DbConnectionPoolMetricsAssertions.create(
|
||||
testing(), "io.opentelemetry.hikaricp-3.0", "timingOutPool")
|
||||
.disableMaxIdleConnections()
|
||||
// the connection is not even acquired
|
||||
.disableUseTime()
|
||||
.assertConnectionPoolEmitsMetrics();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue