You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2020/09/04 17:34:02 UTC
[shardingsphere-elasticjob] branch master updated: Fixes: DDL
statements are executed each time the program is started when using
PostgreSQL as tracing storage. (#1438)
This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere-elasticjob.git
The following commit(s) were added to refs/heads/master by this push:
new 6720715 Fixes: DDL statements are executed each time the program is started when using PostgreSQL as tracing storage. (#1438)
6720715 is described below
commit 67207150b7da05523ba099ccbd96f130e2b757e6
Author: 吴伟杰 <ro...@me.com>
AuthorDate: Sat Sep 5 01:33:49 2020 +0800
Fixes: DDL statements are executed each time the program is started when using PostgreSQL as tracing storage. (#1438)
---
.../tracing/rdb/storage/RDBJobEventStorage.java | 41 +++++++++++++---------
1 file changed, 24 insertions(+), 17 deletions(-)
diff --git a/elasticjob-infra/elasticjob-tracing/elasticjob-tracing-rdb/src/main/java/org/apache/shardingsphere/elasticjob/tracing/rdb/storage/RDBJobEventStorage.java b/elasticjob-infra/elasticjob-tracing/elasticjob-tracing-rdb/src/main/java/org/apache/shardingsphere/elasticjob/tracing/rdb/storage/RDBJobEventStorage.java
index b2b0263..ab7d045 100644
--- a/elasticjob-infra/elasticjob-tracing/elasticjob-tracing-rdb/src/main/java/org/apache/shardingsphere/elasticjob/tracing/rdb/storage/RDBJobEventStorage.java
+++ b/elasticjob-infra/elasticjob-tracing/elasticjob-tracing-rdb/src/main/java/org/apache/shardingsphere/elasticjob/tracing/rdb/storage/RDBJobEventStorage.java
@@ -95,37 +95,44 @@ public final class RDBJobEventStorage {
}
private void createJobExecutionTableAndIndexIfNeeded(final Connection connection) throws SQLException {
- DatabaseMetaData dbMetaData = connection.getMetaData();
- try (ResultSet resultSet = dbMetaData.getTables(connection.getCatalog(), null, TABLE_JOB_EXECUTION_LOG, new String[]{"TABLE"})) {
- if (!resultSet.next()) {
- createJobExecutionTable(connection);
- }
+ if (existsTable(connection, TABLE_JOB_EXECUTION_LOG) || existsTable(connection, TABLE_JOB_EXECUTION_LOG.toLowerCase())) {
+ return;
}
+ createJobExecutionTable(connection);
}
private void createJobStatusTraceTableAndIndexIfNeeded(final Connection connection) throws SQLException {
- DatabaseMetaData dbMetaData = connection.getMetaData();
- try (ResultSet resultSet = dbMetaData.getTables(connection.getCatalog(), null, TABLE_JOB_STATUS_TRACE_LOG, new String[]{"TABLE"})) {
- if (!resultSet.next()) {
- createJobStatusTraceTable(connection);
- }
+ if (existsTable(connection, TABLE_JOB_STATUS_TRACE_LOG) || existsTable(connection, TABLE_JOB_STATUS_TRACE_LOG.toLowerCase())) {
+ return;
}
+ createJobStatusTraceTable(connection);
createTaskIdIndexIfNeeded(connection);
}
+ private boolean existsTable(final Connection connection, final String tableName) throws SQLException {
+ DatabaseMetaData dbMetaData = connection.getMetaData();
+ try (ResultSet resultSet = dbMetaData.getTables(connection.getCatalog(), null, tableName, new String[]{"TABLE"})) {
+ return resultSet.next();
+ }
+ }
+
private void createTaskIdIndexIfNeeded(final Connection connection) throws SQLException {
+ if (existsIndex(connection, TABLE_JOB_STATUS_TRACE_LOG, TASK_ID_STATE_INDEX) || existsIndex(connection, TABLE_JOB_STATUS_TRACE_LOG.toLowerCase(), TASK_ID_STATE_INDEX.toLowerCase())) {
+ return;
+ }
+ createTaskIdAndStateIndex(connection);
+ }
+
+ private boolean existsIndex(final Connection connection, final String tableName, final String indexName) throws SQLException {
DatabaseMetaData dbMetaData = connection.getMetaData();
- try (ResultSet resultSet = dbMetaData.getIndexInfo(connection.getCatalog(), null, TABLE_JOB_STATUS_TRACE_LOG, false, false)) {
- boolean hasTaskIdIndex = false;
+ try (ResultSet resultSet = dbMetaData.getIndexInfo(connection.getCatalog(), null, tableName, false, false)) {
while (resultSet.next()) {
- if (TASK_ID_STATE_INDEX.equals(resultSet.getString("INDEX_NAME"))) {
- hasTaskIdIndex = true;
+ if (indexName.equals(resultSet.getString("INDEX_NAME"))) {
+ return true;
}
}
- if (!hasTaskIdIndex) {
- createTaskIdAndStateIndex(connection);
- }
}
+ return false;
}
private void createJobExecutionTable(final Connection connection) throws SQLException {