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

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


The following commit(s) were added to refs/heads/master by this push:
     new d31209176 IMPALA-14670: Fix NullPointerException in 
getEventProcessorSummary
d31209176 is described below

commit d312091768f122e014d2292c25c1b26c2ba472d2
Author: Venu Reddy <[email protected]>
AuthorDate: Wed Jan 14 10:19:21 2026 +0530

    IMPALA-14670: Fix NullPointerException in getEventProcessorSummary
    
    TEventBatchProgressInfo fields are populated from
    MetastoreEventsProcessor state that may be updated concurrently during
    event processing. To avoid inconsistent reads, the method is expected
    to snapshot all required fields into local variables before using them.
    
    However, currentFilteredEvent_ was accessed directly after a null
    check, allowing it to become null concurrently and causing a
    NullPointerException while populating the progress.
    
    This change snapshots currentFilteredEvent_ into a local variable and
    uses the local reference consistently, preventing the race condition.
    
    Testing:
    - Ran existing tests.
    
    Change-Id: I3c9101811cd706e0eba487595852db3435232cf5
    Reviewed-on: http://gerrit.cloudera.org:8080/23870
    Reviewed-by: Quanlong Huang <[email protected]>
    Tested-by: Impala Public Jenkins <[email protected]>
---
 .../impala/catalog/events/MetastoreEventsProcessor.java | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git 
a/fe/src/main/java/org/apache/impala/catalog/events/MetastoreEventsProcessor.java
 
b/fe/src/main/java/org/apache/impala/catalog/events/MetastoreEventsProcessor.java
index 8807d9e82..68ec104e3 100644
--- 
a/fe/src/main/java/org/apache/impala/catalog/events/MetastoreEventsProcessor.java
+++ 
b/fe/src/main/java/org/apache/impala/catalog/events/MetastoreEventsProcessor.java
@@ -1564,7 +1564,11 @@ public class MetastoreEventsProcessor implements 
ExternalEventsProcessor {
     // It's best effort to make the members in 'progressInfo' consistent but 
we can't
     // guarantee it.
     List<NotificationEvent> eventBatch = currentEventBatch_;
+    long batchStartTimeMs = currentBatchStartTimeMs_;
     List<MetastoreEvent> filteredEvents = currentFilteredEvents_;
+    MetastoreEvent filteredEvent = currentFilteredEvent_;
+    long eventStartTimeMs = currentEventStartTimeMs_;
+    int eventIndex = currentEventIndex_;
     if (eventBatch != null && !eventBatch.isEmpty()) {
       int numHmsEvents = eventBatch.size();
       progressInfo.num_hms_events = numHmsEvents;
@@ -1573,15 +1577,14 @@ public class MetastoreEventsProcessor implements 
ExternalEventsProcessor {
       NotificationEvent lastEvent = eventBatch.get(numHmsEvents - 1);
       progressInfo.max_event_id = lastEvent.getEventId();
       progressInfo.max_event_time_s = lastEvent.getEventTime();
-      progressInfo.current_batch_start_time_ms = currentBatchStartTimeMs_;
-      progressInfo.current_event_start_time_ms = currentEventStartTimeMs_;
-      if (filteredEvents != null) {
+      progressInfo.current_batch_start_time_ms = batchStartTimeMs;
+      if (filteredEvents != null && filteredEvent != null) {
         progressInfo.num_filtered_events = filteredEvents.size();
+        progressInfo.current_event_start_time_ms = eventStartTimeMs;
+        progressInfo.current_event_index = eventIndex;
+        progressInfo.current_event_batch_size = 
filteredEvent.getNumberOfEvents();
+        progressInfo.current_event = filteredEvent.metastoreNotificationEvent_;
       }
-      progressInfo.current_event_index = currentEventIndex_;
-      progressInfo.current_event_batch_size = currentFilteredEvent_ != null ?
-          currentFilteredEvent_.getNumberOfEvents() : 0;
-      progressInfo.current_event = currentEvent_;
     }
     summaryResponse.setProgress(progressInfo);
     return summaryResponse;

Reply via email to