Improve update sql for optimistic locking

The version to be updated could be computed at server side instead of client side, it will save one parameter of prepared statement.

Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
This commit is contained in:
Yanming Zhou
2025-03-26 15:58:05 +08:00
committed by Mahmoud Ben Hassine
parent 22cfc55f7a
commit 92a304e552
2 changed files with 7 additions and 9 deletions

View File

@@ -102,7 +102,7 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
private static final String UPDATE_JOB_EXECUTION = """
UPDATE %PREFIX%JOB_EXECUTION
SET START_TIME = ?, END_TIME = ?, STATUS = ?, EXIT_CODE = ?, EXIT_MESSAGE = ?, VERSION = ?, CREATE_TIME = ?, LAST_UPDATED = ?
SET START_TIME = ?, END_TIME = ?, STATUS = ?, EXIT_CODE = ?, EXIT_MESSAGE = ?, VERSION = VERSION + 1, CREATE_TIME = ?, LAST_UPDATED = ?
WHERE JOB_EXECUTION_ID = ? AND VERSION = ?
""";
@@ -282,7 +282,6 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
this.lock.lock();
try {
Integer version = jobExecution.getVersion() + 1;
String exitDescription = jobExecution.getExitStatus().getExitDescription();
if (exitDescription != null && exitDescription.length() > exitMessageLength) {
@@ -299,7 +298,7 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
Timestamp lastUpdated = jobExecution.getLastUpdated() == null ? null
: Timestamp.valueOf(jobExecution.getLastUpdated());
Object[] parameters = new Object[] { startTime, endTime, jobExecution.getStatus().toString(),
jobExecution.getExitStatus().getExitCode(), exitDescription, version, createTime, lastUpdated,
jobExecution.getExitStatus().getExitCode(), exitDescription, createTime, lastUpdated,
jobExecution.getId(), jobExecution.getVersion() };
// Check if given JobExecution's Id already exists, if none is found
@@ -313,7 +312,7 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
int count = getJdbcTemplate().update(getQuery(UPDATE_JOB_EXECUTION), parameters,
new int[] { Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR,
Types.INTEGER, Types.TIMESTAMP, Types.TIMESTAMP, Types.BIGINT, Types.INTEGER });
Types.TIMESTAMP, Types.TIMESTAMP, Types.BIGINT, Types.INTEGER });
// Avoid concurrent modifications...
if (count == 0) {

View File

@@ -82,7 +82,7 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implement
private static final String UPDATE_STEP_EXECUTION = """
UPDATE %PREFIX%STEP_EXECUTION
SET START_TIME = ?, END_TIME = ?, STATUS = ?, COMMIT_COUNT = ?, READ_COUNT = ?, FILTER_COUNT = ?, WRITE_COUNT = ?, EXIT_CODE = ?, EXIT_MESSAGE = ?, VERSION = ?, READ_SKIP_COUNT = ?, PROCESS_SKIP_COUNT = ?, WRITE_SKIP_COUNT = ?, ROLLBACK_COUNT = ?, LAST_UPDATED = ?
SET START_TIME = ?, END_TIME = ?, STATUS = ?, COMMIT_COUNT = ?, READ_COUNT = ?, FILTER_COUNT = ?, WRITE_COUNT = ?, EXIT_CODE = ?, EXIT_MESSAGE = ?, VERSION = VERSION + 1, READ_SKIP_COUNT = ?, PROCESS_SKIP_COUNT = ?, WRITE_SKIP_COUNT = ?, ROLLBACK_COUNT = ?, LAST_UPDATED = ?
WHERE STEP_EXECUTION_ID = ? AND VERSION = ?
""";
@@ -270,7 +270,6 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implement
this.lock.lock();
try {
Integer version = stepExecution.getVersion() + 1;
Timestamp startTime = stepExecution.getStartTime() == null ? null
: Timestamp.valueOf(stepExecution.getStartTime());
Timestamp endTime = stepExecution.getEndTime() == null ? null
@@ -280,13 +279,13 @@ public class JdbcStepExecutionDao extends AbstractJdbcBatchMetadataDao implement
Object[] parameters = new Object[] { startTime, endTime, stepExecution.getStatus().toString(),
stepExecution.getCommitCount(), stepExecution.getReadCount(), stepExecution.getFilterCount(),
stepExecution.getWriteCount(), stepExecution.getExitStatus().getExitCode(), exitDescription,
version, stepExecution.getReadSkipCount(), stepExecution.getProcessSkipCount(),
stepExecution.getReadSkipCount(), stepExecution.getProcessSkipCount(),
stepExecution.getWriteSkipCount(), stepExecution.getRollbackCount(), lastUpdated,
stepExecution.getId(), stepExecution.getVersion() };
int count = getJdbcTemplate().update(getQuery(UPDATE_STEP_EXECUTION), parameters,
new int[] { Types.TIMESTAMP, Types.TIMESTAMP, Types.VARCHAR, Types.BIGINT, Types.BIGINT,
Types.BIGINT, Types.BIGINT, Types.VARCHAR, Types.VARCHAR, Types.INTEGER, Types.BIGINT,
Types.BIGINT, Types.BIGINT, Types.BIGINT, Types.TIMESTAMP, Types.BIGINT, Types.INTEGER });
Types.BIGINT, Types.BIGINT, Types.VARCHAR, Types.VARCHAR, Types.BIGINT, Types.BIGINT,
Types.BIGINT, Types.BIGINT, Types.TIMESTAMP, Types.BIGINT, Types.INTEGER });
// Avoid concurrent modifications...
if (count == 0) {