Skip to content

Commit f0d5a46

Browse files
Fixed resources leaks (#191)
2 parents c7e64e7 + 4056795 commit f0d5a46

File tree

4 files changed

+47
-47
lines changed

4 files changed

+47
-47
lines changed

flyway-dialect/src/main/java/tech/ydb/flywaydb/database/YdbSchema.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package tech.ydb.flywaydb.database;
22

3+
import java.sql.DatabaseMetaData;
34
import java.sql.ResultSet;
45
import java.sql.SQLException;
56
import java.util.ArrayList;
67
import java.util.List;
78
import java.util.stream.Collectors;
9+
810
import org.flywaydb.core.internal.database.base.Schema;
911
import org.flywaydb.core.internal.jdbc.JdbcTemplate;
1012

@@ -75,15 +77,13 @@ public String toString() {
7577
}
7678

7779
private List<String> schemaTables() throws SQLException {
78-
ResultSet rs = jdbcTemplate.getConnection().getMetaData()
79-
.getTables(null, name, null, new String[]{"TABLE"});
80-
81-
List<String> tables = new ArrayList<>();
82-
83-
while (rs.next()) {
84-
tables.add(database.quote(rs.getString("TABLE_NAME")));
80+
DatabaseMetaData md = jdbcTemplate.getConnection().getMetaData();
81+
try (ResultSet rs = md.getTables(null, name, null, new String[]{"TABLE"})) {
82+
List<String> tables = new ArrayList<>();
83+
while (rs.next()) {
84+
tables.add(database.quote(rs.getString("TABLE_NAME")));
85+
}
86+
return tables;
8587
}
86-
87-
return tables;
8888
}
8989
}

liquibase-dialect/src/main/java/tech/ydb/liquibase/change/InsertDataChangeYdb.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Iterator;
77
import java.util.List;
88
import java.util.Map;
9+
910
import liquibase.change.ChangeMetaData;
1011
import liquibase.change.ColumnConfig;
1112
import liquibase.change.DatabaseChange;
@@ -34,14 +35,13 @@ public SqlStatement[] generateStatements(Database database) {
3435

3536
try {
3637
JdbcConnection jdbcConnection = (JdbcConnection) database.getConnection();
37-
ResultSet resultSet = jdbcConnection.getMetaData()
38-
.getColumns(null, null, getTableName(), null);
39-
40-
while (resultSet.next()) {
41-
columnToLiquibaseDataType.put(
42-
resultSet.getString("COLUMN_NAME").toLowerCase(),
43-
DataTypeFactory.getInstance()
44-
.fromDescription(resultSet.getString("TYPE_NAME"), database));
38+
try (ResultSet rs = jdbcConnection.getMetaData().getColumns(null, null, getTableName(), null)) {
39+
while (rs.next()) {
40+
columnToLiquibaseDataType.put(
41+
rs.getString("COLUMN_NAME").toLowerCase(),
42+
DataTypeFactory.getInstance().fromDescription(rs.getString("TYPE_NAME"), database)
43+
);
44+
}
4545
}
4646

4747
StringBuilder yqlInsert = new StringBuilder()

liquibase-dialect/src/main/java/tech/ydb/liquibase/change/LoadDataChangeYdb.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package tech.ydb.liquibase.change;
22

3-
import com.opencsv.exceptions.CsvMalformedLineException;
43
import java.io.IOException;
54
import java.sql.ResultSet;
65
import java.util.ArrayList;
@@ -9,6 +8,8 @@
98
import java.util.LinkedHashMap;
109
import java.util.List;
1110
import java.util.Map;
11+
12+
import com.opencsv.exceptions.CsvMalformedLineException;
1213
import liquibase.Scope;
1314
import liquibase.change.ChangeMetaData;
1415
import liquibase.change.DatabaseChange;
@@ -23,6 +24,7 @@
2324
import liquibase.statement.core.InsertStatement;
2425
import liquibase.statement.core.RawSqlStatement;
2526
import liquibase.util.csv.CSVReader;
27+
2628
import tech.ydb.liquibase.database.YdbDatabase;
2729

2830
/**
@@ -60,17 +62,16 @@ public SqlStatement[] generateStatements(Database database) {
6062
}
6163

6264
JdbcConnection jdbcConnection = (JdbcConnection) database.getConnection();
63-
ResultSet resultSet = jdbcConnection.getMetaData()
64-
.getColumns(null, null, tableName, null);
65-
66-
while (resultSet.next()) {
67-
columnToLiquibaseDataType.put(
68-
resultSet.getString("COLUMN_NAME").toLowerCase(),
69-
DataTypeFactory.getInstance()
70-
.fromDescription(resultSet.getString("TYPE_NAME"), database));
71-
}
65+
try (ResultSet resultSet = jdbcConnection.getMetaData().getColumns(null, null, tableName, null)) {
66+
while (resultSet.next()) {
67+
columnToLiquibaseDataType.put(
68+
resultSet.getString("COLUMN_NAME").toLowerCase(),
69+
DataTypeFactory.getInstance()
70+
.fromDescription(resultSet.getString("TYPE_NAME"), database));
71+
}
7272

73-
return getSqlStatements(database, reader, headers);
73+
return getSqlStatements(database, reader, headers);
74+
}
7475
} catch (CsvMalformedLineException e) {
7576
throw new RuntimeException("Error parsing " + getRelativeTo() + " on line " + e.getLineNumber() + ": " + e.getMessage());
7677
} catch (UnexpectedLiquibaseException ule) {

shedlock-ydb/src/main/java/tech/ydb/lock/provider/YdbJDBCLockProvider.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import java.sql.SQLException;
44
import java.util.Optional;
5+
56
import javax.sql.DataSource;
7+
68
import net.javacrumbs.shedlock.core.LockConfiguration;
79
import net.javacrumbs.shedlock.core.LockProvider;
810
import net.javacrumbs.shedlock.core.SimpleLock;
@@ -31,33 +33,30 @@ public Optional<SimpleLock> lock(LockConfiguration lockConfiguration) {
3133
try {
3234
connection.setAutoCommit(false);
3335

34-
var selectPS = connection.prepareStatement("SELECT locked_by, lock_until FROM shedlock " +
35-
"WHERE name = ? AND lock_until > CurrentUtcTimestamp()");
36-
37-
selectPS.setString(1, lockConfiguration.getName());
38-
39-
try (var rs = selectPS.executeQuery()) {
40-
if (rs.next()) {
41-
LOGGER.debug("Instance[{}] acquire lock is failed. Leader is {}, lock_until = {}",
42-
LOCKED_BY, rs.getString(1), rs.getString(2));
43-
return Optional.empty();
36+
try (var selectPS = connection.prepareStatement("SELECT locked_by, lock_until FROM shedlock " +
37+
"WHERE name = ? AND lock_until > CurrentUtcTimestamp()")) {
38+
selectPS.setString(1, lockConfiguration.getName());
39+
try (var rs = selectPS.executeQuery()) {
40+
if (rs.next()) {
41+
LOGGER.debug("Instance[{}] acquire lock is failed. Leader is {}, lock_until = {}",
42+
LOCKED_BY, rs.getString(1), rs.getString(2));
43+
return Optional.empty();
44+
}
4445
}
4546
}
4647

47-
var upsertPS = connection.prepareStatement("" +
48+
try (var upsertPS = connection.prepareStatement("" +
4849
"UPSERT INTO shedlock(name, lock_until, locked_at, locked_by) " +
4950
"VALUES (?, Unwrap(CurrentUtcTimestamp() + ?), CurrentUtcTimestamp(), ?)"
50-
);
51-
52-
upsertPS.setObject(1, lockConfiguration.getName());
53-
upsertPS.setObject(2, lockConfiguration.getLockAtMostFor());
54-
upsertPS.setObject(3, LOCKED_BY);
55-
upsertPS.execute();
51+
)) {
52+
upsertPS.setObject(1, lockConfiguration.getName());
53+
upsertPS.setObject(2, lockConfiguration.getLockAtMostFor());
54+
upsertPS.setObject(3, LOCKED_BY);
55+
upsertPS.execute();
56+
}
5657

5758
connection.commit();
58-
5959
LOGGER.debug("Instance[{}] is leader", LOCKED_BY);
60-
6160
return Optional.of(new YdbJDBCLock(lockConfiguration.getName(), dataSource));
6261
} finally {
6362
connection.setAutoCommit(autoCommit);

0 commit comments

Comments
 (0)