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:
committed by
Mahmoud Ben Hassine
parent
22cfc55f7a
commit
92a304e552
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user