> On March 23, 2017, 12:27 a.m., Alexander Kolbasov wrote:
> > This is good, but I am wondering what is the purpose in using different 
> > events between transactional and non-transactional listeners in most cases? 
> > It would be much simpler and cleaner to reuse existing event except for one 
> > or two cases where this isn't possible.

I don't think it would be simpler. Hive could have both or either one of 
transactional or non-transactoinal listeners enabled. If transactional 
listeners are not enabled but listeners, then we have to create the event 
later. If none of listeners are enabled, then the event should not be created. 
This will another IF condition.

I.e.

    CreateDatabaseEvent event = null;

    try {
      if (!transactionalListeners.isEmpty()) {
        event = new CreateDatabaseEvent(...);
        event.setEnvironmentContext(...);
        
        call transactionalListeners
      }
    } catch (...) {
      if (listeners.isEmpty()) {
        if (event == null) {
           event = new CreateDatabaseEvent(...);
           event.setEnvironmentContext(...);
        }
        
        call listeners
      }
    }
    
The above code can reuse the CreateDatabaseEvent, but we still need to create 
it if transactionalListeners was disabled. Also, we would need to add code to 
all events to accept the setStatus() method in case we're reusing the event. 
That's why I just remove that and keep it simple by leaving the old way to 
recreate the event.

    try {
      if (!transactionalListeners.isEmpty()) {
        MetaStoreListenerNotifier
           .newNotification(EventType.CREATE_DATABASE, new 
CreateDatabaseEvent(db, true, this))
           
.setEnvironmentContext(environmentContext).notify(transactionalListeners);
      }
    } catch (...) {
      if (listeners.isEmpty()) {
        MetaStoreListenerNotifier
           .newNotification(EventType.CREATE_DATABASE, new 
CreateDatabaseEvent(db, success, this))
           .setEnvironmentContext(environmentContext).notify(listeners);
      }
    }


> On March 23, 2017, 12:27 a.m., Alexander Kolbasov wrote:
> > metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
> > Line 2491 (original), 2526 (patched)
> > <https://reviews.apache.org/r/57626/diff/4/?file=1670533#file1670533line2535>
> >
> >     Why is this the case? The above condition is never null.

Right, but it can be empty.


> On March 23, 2017, 12:27 a.m., Alexander Kolbasov wrote:
> > metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
> > Lines 2530 (patched)
> > <https://reviews.apache.org/r/57626/diff/4/?file=1670533#file1670533line2539>
> >
> >     So why do we notify them twice - once with success and another time 
> > with failure? Something is wrong here.

I don't know the idea behind this notification. Maybe someone else is 
processing failed events for logging or something. I don't want to remove it 
because of legacy problems.


> On March 23, 2017, 12:27 a.m., Alexander Kolbasov wrote:
> > metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
> > Line 2820 (original)
> > <https://reviews.apache.org/r/57626/diff/4/?file=1670533#file1670533line2891>
> >
> >     Just to make sure - this is kind of independent cleanup - right?

Yes. I am trying to coming up with a better approach for this cleanup.


> On March 23, 2017, 12:27 a.m., Alexander Kolbasov wrote:
> > metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreListenerNotifier.java
> > Lines 195 (patched)
> > <https://reviews.apache.org/r/57626/diff/4/?file=1670534#file1670534line195>
> >
> >     In all places where you call it, you know that listeners != null && 
> > !listeners.empty()
> >     
> >     So may be this should be replaced with preconditions check?

That would be a good thing. I'm still figuring out a better way to improve the 
notifier to avoid checking IF() twice (one outside the class, and another in 
this class). But PreCondition is a good one as this class is just an internal 
API.


> On March 23, 2017, 12:27 a.m., Alexander Kolbasov wrote:
> > metastore/src/java/org/apache/hadoop/hive/metastore/events/ListenerEvent.java
> > Lines 120 (patched)
> > <https://reviews.apache.org/r/57626/diff/4/?file=1670535#file1670535line120>
> >
> >     Loking at the way it is used, I would consider adding constructor with 
> > parameters instead. They are always used like this:
> >     
> >     
> >             if (!listeners.isEmpty()) {
> >               MetaStoreListenerNotifier
> >                   .newNotification(EventType.CREATE_INDEX, new 
> > AddIndexEvent(index, success, this))
> >                   .addParameters(transactionalListenerResponses)
> >                   .notify(listeners);
> >             }
> >             
> >     This is essentially equivalent to constructing a new event with the 
> > given set of parameters.

They're always used only on the non-transactional listeners but 
transactionalListeners. I will think about another static method to pass all 
parameters instead.


> On March 23, 2017, 12:27 a.m., Alexander Kolbasov wrote:
> > metastore/src/java/org/apache/hadoop/hive/metastore/events/ListenerEvent.java
> > Lines 121 (patched)
> > <https://reviews.apache.org/r/57626/diff/4/?file=1670535#file1670535line121>
> >
> >     If you decide to keep this interface,it would be cleaner to require 
> > that parameters isn't null and verify with Preconditions.checkNotNull

This is a public method that may be called by external listeners. I'd like to 
avoid throwing an exception and message if the parameters is null. I like that 
idea of just ignoring the null and not adding anything to the parameters. 
That's why I used the 'addParameters' name instead of 'setParameter' to giving 
a meaning.


- Sergio


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/57626/#review169801
-----------------------------------------------------------


On March 20, 2017, 10:33 p.m., Sergio Pena wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/57626/
> -----------------------------------------------------------
> 
> (Updated March 20, 2017, 10:33 p.m.)
> 
> 
> Review request for hive.
> 
> 
> Bugs: HIVE-16164
>     https://issues.apache.org/jira/browse/HIVE-16164
> 
> 
> Repository: hive-git
> 
> 
> Description
> -------
> 
> This fix updates the EnvironmentContext with a DB_NOTIFICATION_EVENT_ID 
> property from withing the DbNotificationListener class. It then passes the 
> EnvironmentContext from transactional listeners to non-transactional 
> listeners so that the eventId is shared between them.
> 
> The patch provides the following changes:
> - DbNotificationListener       Changes to pass the EnvironmentContext from 
> transactional to non-transactional listeners.
> - HiveAlterHandler             Changes to pass the EnvironmentContext from 
> transactional to non-transactional listeners.
> - MetaStoreListenerNotifier    New helper class that wraps the notification 
> call to the listeners.
> - TestObjectStore              Verifies that the addNotificationEvent() 
> method saves the eventId on the NotificationEvent object.
> - TestDbNotificationListener   Verifies that any HMS call is passing the 
> DB_NOTIFICATION_EVENT_ID to non-transactional listeners.
> 
> 
> Diffs
> -----
> 
>   
> hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/DbNotificationListener.java
>  f7e3e3a0a71094992fdf4bd3ceea2da0bf7d1ff0 
>   
> hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/MetaStoreEventListenerConstants.java
>  PRE-CREATION 
>   
> itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/TestDbNotificationListener.java
>  1cf47c36cb490ce0b17ffe312cd2e9fc4bb7cd9a 
>   metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java 
> 4ce6a659c94265d83abbaedb9c52d7e15bf8dde6 
>   metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java 
> 07eca38190c1b05bb4a3977e9154423449828957 
>   
> metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreListenerNotifier.java
>  PRE-CREATION 
>   
> metastore/src/java/org/apache/hadoop/hive/metastore/events/ListenerEvent.java 
> 62aeb8cc343fc4aab72e76da890e36ac3a16b7bf 
>   metastore/src/test/org/apache/hadoop/hive/metastore/TestObjectStore.java 
> 1f87eeb18f6edf7351b3c8da6a6826c08656e48c 
> 
> 
> Diff: https://reviews.apache.org/r/57626/diff/4/
> 
> 
> Testing
> -------
> 
> HiveQA showed only one test failure. it is fixed, and waiting for HiveQA to 
> complete 100% tests.
> 
> 
> Thanks,
> 
> Sergio Pena
> 
>

Reply via email to