[ 
https://issues.apache.org/jira/browse/HIVE-13966?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15346431#comment-15346431
 ] 

Reuben Kuhnert commented on HIVE-13966:
---------------------------------------

Seems like it might make sense to use an interface like 
{{TransactionalMetastoreEventListener}} or something so that we can enforce 
compile time safety. Then just tag the relevant classes with said interface so 
that we can have loops of type (with compile time check):

{code}
  for (TransactionalMetaStoreEventListener listener : listeners) { ... }
{code}

This allows alows you to enforce that listeners dropped into the 
{{<name>hive.metastore.synchronous.event.listeners</name>}} bucket all expect 
to be called within a transaction.

Alternatively, it might make sense to invert control such that listeners that 
care about transactional updates can listen for them, while leaving others 
unaffected:

{code}
class MetastoreEventListener {
  public abstract onTransactionalEvent(SomeEvent event); // Transactionals will 
listen for this
  public abstract onEvent(SomeEvent event);  // Everyone else will listen for 
this.
}
{code}

Transactional listeners will implement the first while leaving the second as a 
{{noop}}. 
$0.02

> 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
>            Assignee: Rahul Sharma
>            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)

Reply via email to