Skip to content

Commit 8e507a1

Browse files
committed
Remove the experimental useLambdaCheck, opt for lambdaMode(true) instead
Where lambdaMode(true) just turns sets validateOnHeartbeat = false and ultimately use validateStaleMillis
1 parent a9c5723 commit 8e507a1

File tree

7 files changed

+12
-189
lines changed

7 files changed

+12
-189
lines changed

ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceBuilder.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,7 @@ default DataSourceBuilder initDatabaseForPlatform(String platform) {
710710
* check to detect when the function has been restored from suspension.
711711
*/
712712
@Deprecated(since = "Experimental feature")
713-
DataSourceBuilder useLambdaCheck(boolean useLambda);
713+
DataSourceBuilder lambdaMode(boolean useLambda);
714714

715715
/**
716716
* Load the settings from the properties with no prefix on the property names.
@@ -1008,11 +1008,5 @@ default String driverClassName() {
10081008
* @return True to obtain a connection using ownerUsername and run InitDatabase.
10091009
*/
10101010
boolean useInitDatabase();
1011-
1012-
/**
1013-
* Return true to enable the additional Lambda check (for old idle connections
1014-
* due to Lambda suspension).
1015-
*/
1016-
boolean useLambdaCheck();
10171011
}
10181012
}

ebean-datasource-api/src/main/java/io/ebean/datasource/DataSourceConfig.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ public class DataSourceConfig implements DataSourceBuilder.Settings {
8080
private Properties clientInfo;
8181
private String applicationName;
8282
private boolean shutdownOnJvmExit;
83-
private boolean useLambdaCheck;
8483
private boolean validateOnHeartbeat = true;
8584

8685
@Override
@@ -132,7 +131,7 @@ public DataSourceConfig copy() {
132131
copy.offline = offline;
133132
copy.failOnStart = failOnStart;
134133
copy.shutdownOnJvmExit = shutdownOnJvmExit;
135-
copy.useLambdaCheck = useLambdaCheck;
134+
copy.validateOnHeartbeat = validateOnHeartbeat;
136135
if (customProperties != null) {
137136
copy.customProperties = new LinkedHashMap<>(customProperties);
138137
}
@@ -178,8 +177,8 @@ public DataSourceConfig setDefaults(DataSourceBuilder builder) {
178177
if (!shutdownOnJvmExit && other.isShutdownOnJvmExit()){
179178
shutdownOnJvmExit = true;
180179
}
181-
if (!useLambdaCheck && other.useLambdaCheck()){
182-
useLambdaCheck = true;
180+
if (validateOnHeartbeat && !other.isValidateOnHeartbeat()){
181+
validateOnHeartbeat = false;
183182
}
184183
if (customProperties == null) {
185184
var otherCustomProps = other.getCustomProperties();
@@ -717,17 +716,11 @@ public DataSourceConfig validateOnHeartbeat(boolean validateOnHeartbeat) {
717716
}
718717

719718
@Override
720-
public DataSourceBuilder useLambdaCheck(boolean useLambda) {
721-
this.useLambdaCheck = useLambda;
719+
public DataSourceBuilder lambdaMode(boolean useLambda) {
722720
this.validateOnHeartbeat = false;
723721
return this;
724722
}
725723

726-
@Override
727-
public boolean useLambdaCheck() {
728-
return useLambdaCheck;
729-
}
730-
731724
@Override
732725
public DataSourceConfig load(Properties properties) {
733726
return load(properties, null);
@@ -782,7 +775,6 @@ private void loadSettings(ConfigPropertiesHelper properties) {
782775
offline = properties.getBoolean("offline", offline);
783776
shutdownOnJvmExit = properties.getBoolean("shutdownOnJvmExit", shutdownOnJvmExit);
784777
validateOnHeartbeat = properties.getBoolean("validateOnHeartbeat", validateOnHeartbeat);
785-
useLambdaCheck = properties.getBoolean("useLambdaCheck", useLambdaCheck);
786778

787779
String isoLevel = properties.get("isolationLevel", _isolationLevel(isolationLevel));
788780
this.isolationLevel = _isolationLevel(isoLevel);

ebean-datasource-api/src/test/java/io/ebean/datasource/DataSourceConfigTest.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -136,20 +136,20 @@ public void defaults_someOverride() {
136136
assertThat(readOnly.getUsername()).isEqualTo("foo2");
137137
assertThat(readOnly.getMinConnections()).isEqualTo(3);
138138
assertThat(readOnly.isShutdownOnJvmExit()).isFalse();
139-
assertThat(readOnly.useLambdaCheck()).isFalse();
139+
assertThat(readOnly.isValidateOnHeartbeat()).isFalse();
140140
}
141141

142142
@Test
143143
public void defaults_someOverride2() {
144144
DataSourceConfig readOnly = new DataSourceConfig();
145145
readOnly.setUrl("jdbc:postgresql://127.0.0.2:5432/unit");
146146

147-
DataSourceBuilder configBuilder = create().shutdownOnJvmExit(true).useLambdaCheck(true);
147+
DataSourceBuilder configBuilder = create().shutdownOnJvmExit(true).lambdaMode(true);
148148
DataSourceConfig readOnly2 = readOnly.setDefaults(configBuilder);
149149

150150
assertThat(readOnly2).isSameAs(readOnly);
151151
assertThat(readOnly.isShutdownOnJvmExit()).isTrue();
152-
assertThat(readOnly.useLambdaCheck()).isTrue();
152+
assertThat(readOnly.isValidateOnHeartbeat()).isTrue();
153153
}
154154

155155
private DataSourceConfig create() {
@@ -171,7 +171,7 @@ public void loadSettings() throws IOException {
171171
assertConfigValues(config);
172172
assertThat(config.isShutdownOnJvmExit()).isTrue();
173173
assertThat(config.isValidateOnHeartbeat()).isTrue();
174-
assertThat(config.useLambdaCheck()).isTrue();
174+
assertThat(config.isValidateOnHeartbeat()).isTrue();
175175
}
176176

177177
@Test
@@ -182,8 +182,7 @@ public void load_prefix() throws IOException {
182182
var config = new DataSourceConfig().load(props, "bar");
183183
assertConfigValues(config);
184184
assertThat(config.isShutdownOnJvmExit()).isFalse();
185-
assertThat(config.useLambdaCheck()).isFalse();
186-
assertThat(config.useLambdaCheck()).isFalse();
185+
assertThat(config.isValidateOnHeartbeat()).isFalse();
187186
}
188187

189188
@Test

ebean-datasource/src/main/java/io/ebean/datasource/pool/ConnectionPool.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,8 @@ final class ConnectionPool implements DataSourcePool {
6262
private final Properties clientInfo;
6363
private final String applicationName;
6464
private final DataSource source;
65-
private final int lambdaTrimMillis;
6665
private final boolean validateOnHeartbeat;
6766
private long nextTrimTime;
68-
private long nextLambdaTrimTime;
6967

7068
/**
7169
* HeartBeat checking will discover when it goes down, and comes back up again.
@@ -105,7 +103,6 @@ final class ConnectionPool implements DataSourcePool {
105103
this.initSql = params.getInitSql();
106104
this.transactionIsolation = params.getIsolationLevel();
107105
this.maxInactiveMillis = 1000 * params.getMaxInactiveTimeSecs();
108-
this.lambdaTrimMillis = Math.max(maxInactiveMillis + 60_000, 300_000);
109106
this.maxAgeMillis = 60000L * params.getMaxAgeMinutes();
110107
this.leakTimeMinutes = params.getLeakTimeMinutes();
111108
this.captureStackTrace = params.isCaptureStackTrace();
@@ -131,7 +128,6 @@ final class ConnectionPool implements DataSourcePool {
131128
init();
132129
}
133130
this.nextTrimTime = System.currentTimeMillis() + trimPoolFreqMillis;
134-
this.nextLambdaTrimTime = nextTrimTime + lambdaTrimMillis;
135131
}
136132

137133
private void init() {
@@ -344,17 +340,6 @@ private void notifyUp() {
344340
}
345341
}
346342

347-
void checkLambdaIdle() {
348-
if (System.currentTimeMillis() > nextLambdaTrimTime) {
349-
// means that the usual background trimIdleConnections() has not been run recently
350-
// which we interpret as a lambda being invoked after coming back from suspension
351-
var timeGapSeconds = (System.currentTimeMillis() - nextTrimTime) / 1000;
352-
var status = status(false);
353-
Log.info("DataSource [{0}] lambda trim idle connections - timeGap {1}s {2}", name, timeGapSeconds, status);
354-
trimIdleConnections();
355-
}
356-
}
357-
358343
/**
359344
* Trim connections in the free list based on idle time and maximum age.
360345
*/
@@ -363,7 +348,6 @@ private void trimIdleConnections() {
363348
try {
364349
queue.trim(maxInactiveMillis, maxAgeMillis);
365350
nextTrimTime = System.currentTimeMillis() + trimPoolFreqMillis;
366-
nextLambdaTrimTime = nextTrimTime + lambdaTrimMillis;
367351
} catch (Exception e) {
368352
Log.error("Error trying to trim idle connections - message:" + e.getMessage(), e);
369353
}

ebean-datasource/src/main/java/io/ebean/datasource/pool/ConnectionPoolFactory.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ public final class ConnectionPoolFactory implements DataSourceFactory {
1111

1212
@Override
1313
public DataSourcePool createPool(String name, DataSourceConfig config) {
14-
var pool = new ConnectionPool(name, config);
15-
return config.useLambdaCheck() ? new LambdaPool(pool) : pool;
14+
return new ConnectionPool(name, config);
1615
}
1716
}

ebean-datasource/src/main/java/io/ebean/datasource/pool/LambdaPool.java

Lines changed: 0 additions & 143 deletions
This file was deleted.

ebean-datasource/src/test/java/io/ebean/datasource/pool/DataSourcePoolFactoryTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,10 @@ void createPool_forLambda() throws Exception {
4040
.url("jdbc:h2:mem:factory2")
4141
.username("sa")
4242
.password("")
43-
.useLambdaCheck(true)
43+
.lambdaMode(true)
4444
// .trimPoolFreqSecs(-1) // stop the heartbeat and reduce LAMBDA_MILLIS to 1100
4545
.build();
4646

47-
assertThat(pool).isInstanceOf(LambdaPool.class);
48-
4947
try (Connection connection = pool.getConnection()) {
5048
try (PreparedStatement stmt = connection.prepareStatement("create table junk (acol varchar(10))")) {
5149
stmt.execute();

0 commit comments

Comments
 (0)