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 {