This is an automated email from the ASF dual-hosted git repository.

stigahuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git

commit 367793fa1ee218b77cbb259650b3709e257908bf
Author: Sai Hemanth Gantasala <[email protected]>
AuthorDate: Fri Jun 23 19:17:58 2023 -0700

    IMPALA-12213: Verify if the table exists in the
    event processor for reload event
    
    When a reload event is being processed in the event processor, it is
    ideal to verify if the table exists before checking if the event is
    older. In the production use case, it is very likely that create and
    reload events for a same table comes in the same batch of events and
    this might lead to null pointer exception while processing reload event
    since the table does not exist in the cache.
    
    Testing: Added an end-to-end test case to simulate the above scenario
    and verify that event processor is in active state at the end of the
    test.
    
    Change-Id: I6bf7f596154e3695b7eea723d8cd3b0f7bda83cb
    Reviewed-on: http://gerrit.cloudera.org:8080/20117
    Reviewed-by: Impala Public Jenkins <[email protected]>
    Tested-by: Impala Public Jenkins <[email protected]>
---
 .../org/apache/impala/catalog/events/MetastoreEvents.java  |  2 +-
 tests/custom_cluster/test_events_custom_configs.py         | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git 
a/fe/src/main/java/org/apache/impala/catalog/events/MetastoreEvents.java 
b/fe/src/main/java/org/apache/impala/catalog/events/MetastoreEvents.java
index b9d1334e9..11aa1e407 100644
--- a/fe/src/main/java/org/apache/impala/catalog/events/MetastoreEvents.java
+++ b/fe/src/main/java/org/apache/impala/catalog/events/MetastoreEvents.java
@@ -2603,7 +2603,7 @@ public class MetastoreEvents {
     }
 
     private boolean isOlderEvent() {
-      if (tbl_ instanceof IncompleteTable) {
+      if (tbl_ == null || tbl_ instanceof IncompleteTable) {
         return false;
       }
       // Always check the lastRefreshEventId on the table first for table 
level refresh
diff --git a/tests/custom_cluster/test_events_custom_configs.py 
b/tests/custom_cluster/test_events_custom_configs.py
index 0a53c31f7..0e8a9cd28 100644
--- a/tests/custom_cluster/test_events_custom_configs.py
+++ b/tests/custom_cluster/test_events_custom_configs.py
@@ -297,6 +297,20 @@ class 
TestEventProcessingCustomConfigs(CustomClusterTestSuite):
     part_events_skipped_after = EventProcessorUtils.get_num_skipped_events()
     assert part_events_skipped_after > part_events_skipped_before
 
+    # Test to verify IMPALA-12213
+    table = self.hive_client.get_table(unique_database, test_reload_table)
+    table.dbName = unique_database
+    table.tableName = "test_sequence_table"
+    self.hive_client.create_table(table)
+    data = FireEventRequestData()
+    data.refreshEvent = True
+    req = FireEventRequest(True, data)
+    req.dbName = unique_database
+    req.tableName = "test_sequence_table"
+    self.hive_client.fire_listener_event(req)
+    EventProcessorUtils.wait_for_event_processing(self)
+    assert EventProcessorUtils.get_event_processor_status() == "ACTIVE"
+
 
   
@CustomClusterTestSuite.with_args(catalogd_args="--hms_event_polling_interval_s=1")
   def test_commit_compaction_events(self, unique_database):

Reply via email to