Extend CHECKPOINT_LOCK to HSQLDBSaver.execute()

This is used when saving new data to the db, so also needs to be blocked if we are checkpointing or deciding whether to checkpoint.
This commit is contained in:
CalDescent 2021-06-28 19:24:53 +01:00
parent ee95a00ce2
commit 52b0c244a8
2 changed files with 9 additions and 7 deletions

View File

@ -55,7 +55,7 @@ public class HSQLDBRepository implements Repository {
private static final Logger LOGGER = LogManager.getLogger(HSQLDBRepository.class);
private static final Object CHECKPOINT_LOCK = new Object();
public static final Object CHECKPOINT_LOCK = new Object();
// "serialization failure"
private static final Integer DEADLOCK_ERROR_CODE = Integer.valueOf(-4861);

View File

@ -61,13 +61,15 @@ public class HSQLDBSaver {
public boolean execute(HSQLDBRepository repository) throws SQLException {
String sql = this.formatInsertWithPlaceholders();
try {
PreparedStatement preparedStatement = repository.prepareStatement(sql);
this.bindValues(preparedStatement);
synchronized (HSQLDBRepository.CHECKPOINT_LOCK) {
try {
PreparedStatement preparedStatement = repository.prepareStatement(sql);
this.bindValues(preparedStatement);
return preparedStatement.execute();
} catch (SQLException e) {
throw repository.examineException(e);
return preparedStatement.execute();
} catch (SQLException e) {
throw repository.examineException(e);
}
}
}