[ https://issues.apache.org/jira/browse/HIVE-13966?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15329382#comment-15329382 ]
Reuben Kuhnert commented on HIVE-13966: --------------------------------------- Looking at this pattern in a number of metastore functions: {code} if (!success) { ms.rollbackTransaction(); if (madeDir) { wh.deleteDir(tblPath, true); } } for (MetaStoreEventListener listener : listeners) { CreateTableEvent createTableEvent = new CreateTableEvent(tbl, success, this); createTableEvent.setEnvironmentContext(envContext); listener.onCreateTable(createTableEvent); } {code} I'm noticing that {{DBNotificationListener}} is a subclass of {{MetastoreEventListener}}. When you say we should not require bringing all post event listeners into the transaction (but we do want to bring in {{DbNotificationListener}}), would that mean having a separate hierarchy for those listeners that *should* be part of the transaction? Is that what is meant by 'synchronous' (part of the transaction) or do we mean 'synchronous' as in not queued for processing later, per: {code} * Design overview: This listener takes any event, builds a NotificationEventResponse, * and puts it on a queue. There is a dedicated thread that reads entries from the queue and * places them in the database. The reason for doing it in a separate thread is that we want to * avoid slowing down other metadata operations with the work of putting the notification into * the database. Also, occasionally the thread needs to clean the database of old records. We * definitely don't want to do that as part of another metadata operation. */ public class DbNotificationListener extends MetaStoreEventListener { {code} > DbNotificationListener: can loose DDL operation notifications > ------------------------------------------------------------- > > Key: HIVE-13966 > URL: https://issues.apache.org/jira/browse/HIVE-13966 > Project: Hive > Issue Type: Bug > Components: HCatalog > Reporter: Nachiket Vaidya > Priority: Critical > > The code for each API in HiveMetaStore.java is like this: > 1. openTransaction() > 2. -- operation-- > 3. commit() or rollback() based on result of the operation. > 4. add entry to notification log (unconditionally) > If the operation is failed (in step 2), we still add entry to notification > log. Found this issue in testing. > It is still ok as this is the case of false positive. > If the operation is successful and adding to notification log failed, the > user will get an MetaException. It will not rollback the operation, as it is > already committed. We need to handle this case so that we will not have false > negatives. -- This message was sent by Atlassian JIRA (v6.3.4#6332)