You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by st...@apache.org on 2023/09/12 23:35:58 UTC

[impala] branch master updated: IMPALA-12399: Add filter to skip OPEN_TXN events from HMS

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


The following commit(s) were added to refs/heads/master by this push:
     new 73430a2cd IMPALA-12399: Add filter to skip OPEN_TXN events from HMS
73430a2cd is described below

commit 73430a2cdcb4be876cd73303a664414c3f94f9fd
Author: Venu Reddy <k....@gmail.com>
AuthorDate: Sun Aug 27 15:39:10 2023 +0530

    IMPALA-12399: Add filter to skip OPEN_TXN events from HMS
    
    Notification events like OPEN_TXN are ignored on catalogd
    MetastoreEventsProcessor. So, we can pass eventTypeSkipList with OPEN_TXN
    in NotificationEventRequest while invoking get_next_notification() to
    avoid reading such notification messages from metastore and then ignoring
    on catalogd. OPEN_TXN event being more frequent(received even upon
    describe table operation from beeline), we can significantly reduce
    unwanted processing on both hive metastore and catalogd. Catalogd reads
    events in batches of EVENTS_BATCH_SIZE_PER_RPC, skipping such unnecessary
    events can help catchup the events faster.
    
    Testing:
    - Manually tested in cluster and added a testcase
    
    Change-Id: Id2f2e1040abce0b00a8a07bfe8b46afcd98290bf
    Reviewed-on: http://gerrit.cloudera.org:8080/20427
    Tested-by: Impala Public Jenkins <im...@cloudera.com>
    Reviewed-by: Sai Hemanth Gantasala <sa...@cloudera.com>
    Reviewed-by: Quanlong Huang <hu...@gmail.com>
---
 .../java/org/apache/impala/compat/MetastoreShim.java    |  1 +
 .../impala/catalog/events/MetastoreEventsProcessor.java |  5 +++++
 .../catalog/events/MetastoreEventsProcessorTest.java    | 17 +++++++++++++++++
 3 files changed, 23 insertions(+)

diff --git a/fe/src/compat-hive-3/java/org/apache/impala/compat/MetastoreShim.java b/fe/src/compat-hive-3/java/org/apache/impala/compat/MetastoreShim.java
index 71bac5179..d36b46444 100644
--- a/fe/src/compat-hive-3/java/org/apache/impala/compat/MetastoreShim.java
+++ b/fe/src/compat-hive-3/java/org/apache/impala/compat/MetastoreShim.java
@@ -586,6 +586,7 @@ public class MetastoreShim extends Hive3MetastoreShimBase {
    */
   public static NotificationEventResponse getNextNotification(IMetaStoreClient msClient,
       NotificationEventRequest eventRequest) throws TException {
+    eventRequest.setEventTypeSkipList(MetastoreEventsProcessor.getEventSkipList());
     return msClient.getThriftClient().get_next_notification(eventRequest);
   }
 
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 c392ef980..d3debde25 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
@@ -265,6 +265,9 @@ public class MetastoreEventsProcessor implements ExternalEventsProcessor {
 
   private static final long SECOND_IN_NANOS = 1000 * 1000 * 1000L;
 
+  // List of event types to skip while fetching notification events from metastore
+  private static final List<String> EVENT_SKIP_LIST = Arrays.asList("OPEN_TXN");
+
   /**
    * Wrapper around {@link
    * MetastoreEventsProcessor#getNextMetastoreEventsInBatches(CatalogServiceCatalog,
@@ -1126,4 +1129,6 @@ public class MetastoreEventsProcessor implements ExternalEventsProcessor {
   public static MessageDeserializer getMessageDeserializer() {
     return MESSAGE_DESERIALIZER;
   }
+
+  public static List<String> getEventSkipList() { return EVENT_SKIP_LIST; }
 }
diff --git a/fe/src/test/java/org/apache/impala/catalog/events/MetastoreEventsProcessorTest.java b/fe/src/test/java/org/apache/impala/catalog/events/MetastoreEventsProcessorTest.java
index bfd44f86c..b1dd8b097 100644
--- a/fe/src/test/java/org/apache/impala/catalog/events/MetastoreEventsProcessorTest.java
+++ b/fe/src/test/java/org/apache/impala/catalog/events/MetastoreEventsProcessorTest.java
@@ -3259,6 +3259,23 @@ public class MetastoreEventsProcessorTest {
     }
   }
 
+  /**
+   * Test whether open transaction event is skipped while fetching notification events
+   * @throws Exception
+   */
+  @Test
+  public void testSkipFetchOpenTransactionEvent() throws Exception {
+    try (MetaStoreClient client = catalog_.getMetaStoreClient()) {
+      // Make an empty transaction
+      long txnId = MetastoreShim.openTransaction(client.getHiveClient());
+      MetastoreShim.commitTransaction(client.getHiveClient(), txnId);
+    }
+    List<NotificationEvent> events = eventsProcessor_.getNextMetastoreEvents();
+    assertEquals(1, events.size());
+    assertEquals(MetastoreEventType.COMMIT_TXN,
+        MetastoreEventType.from(events.get(0).getEventType()));
+  }
+
   private void createDatabase(String catName, String dbName,
       Map<String, String> params) throws TException {
     try(MetaStoreClient msClient = catalog_.getMetaStoreClient()) {