> On March 17, 2017, 1:28 a.m., Alexander Kolbasov wrote:
> > hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/DbNotificationListener.java
> > Lines 80 (patched)
> > <https://reviews.apache.org/r/57626/diff/2/?file=1666416#file1666416line80>
> >
> >     Do you intentionally keep it public? This can be private.
> >     
> >     Please add comment describing what this is.

I kept it public so that other listeners, like Sentry, can get the parameter 
key where the event ID is stored. I moved this constant to another class named 
MetaStoreEventListenerConstants instead. It is also public for the same reason 
explained before.


> On March 17, 2017, 1:28 a.m., Alexander Kolbasov wrote:
> > metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
> > Line 82 (original), 87 (patched)
> > <https://reviews.apache.org/r/57626/diff/2/?file=1666419#file1666419line87>
> >
> >     Is there any generic policy about wildcard imports?

We usually avoid using wildcard imports, but since this HiveMetaStore class is 
using all of the imported events, I thought keeping it simple was good to have. 
But let me know why this is not good to do and I will change it.


> On March 17, 2017, 1:28 a.m., Alexander Kolbasov wrote:
> > metastore/src/java/org/apache/hadoop/hive/metastore/MetaStoreListenerNotifier.java
> > Lines 138 (patched)
> > <https://reviews.apache.org/r/57626/diff/2/?file=1666420#file1666420line138>
> >
> >     1) Naming - it isn't event, it is something rather different
> >     
> >     2) It seems that in all contexts wherre this is used we always 
> > immediately set environment context and call notify. More over, we check 
> > for listeners != null and being non-empty twice - once before we call this 
> > and a second time when we call notify.
> >     
> >     What do you think of adding both environmentContext and listeners to 
> > the constructor? Or, even simpler, have a static method which will 
> > incorporate all this logic without allocating a new 
> > MetaStoreListenerNotifier at all? SOmething like this:
> >     
> >       public static Optional<Map<String, String>> notifyAll(EventType 
> > eventType, 
> >                                                             ListenerEvent 
> > listenerEvent,
> >                                                             
> > EnvironmentContext context,
> >                                                             final 
> > List<MetaStoreEventListener> listeners
> >                                                             ) throws 
> > MetaException {
> >         if (listeners != null && notificationEvents.containsKey(eventType)) 
> > {
> >           listenerEvent.setEnvironmentContext(context);
> >           for (MetaStoreEventListener listener: listeners) {
> >             notificationEvents.get(eventType).notify(listener, 
> > listenerEvent);
> >           }
> >         }
> >         
> >         return listenerEvent.getParameters();
> >       }

I thought about this, but I didn't want to do it for two reasons:

1. I wanted to keep the method readable because the number of parameters 
passed, it is currently 5 (eventType, listenerEvent, context, parameters, 
listeners) and I don't know if it might increase in the future. 

2. I didn't want to create a ListenerEvent object if there was no listeners to 
notify. I kept thinking on a better wayt for this, but I didn't come with any 
better method.

The above code you wrote looks good, but I'm still thinking on readability and 
unecessary objects creationg.


> On March 17, 2017, 1:28 a.m., Alexander Kolbasov wrote:
> > metastore/src/java/org/apache/hadoop/hive/metastore/events/ListenerEvent.java
> > Lines 82 (patched)
> > <https://reviews.apache.org/r/57626/diff/2/?file=1666421#file1666421line82>
> >
> >     Do we actually need to return these parameters? Do we copy them to 
> > other places? Do we need to worry about mutability (e.g. returning a copy 
> > of parameters?)

I need to return this so we can pass it to the non-transactional listeners. No 
all places on the HiveMetaStore can re-use the ListenerEvent.
I made it immutable now btw.


> On March 17, 2017, 1:28 a.m., Alexander Kolbasov wrote:
> > metastore/src/java/org/apache/hadoop/hive/metastore/events/ListenerEvent.java
> > Lines 86 (patched)
> > <https://reviews.apache.org/r/57626/diff/2/?file=1666421#file1666421line86>
> >
> >     Do we actually need to explicitely set parameters?

For the same reason that we need to pass the parameters between transactional 
and non-transactional listeners because I couldn't reuse the ListenerEvent in 
all the HiveMetaStore cases.


> On March 17, 2017, 1:28 a.m., Alexander Kolbasov wrote:
> > metastore/src/java/org/apache/hadoop/hive/metastore/events/ListenerEvent.java
> > Lines 90 (patched)
> > <https://reviews.apache.org/r/57626/diff/2/?file=1666421#file1666421line90>
> >
> >     Naming - may be addParameter() ?
> >     Also - is it allowed to modify existing parameter or not?
> >     addParameter() may throw RuntimeException if an attempt is made to 
> > modify existing parameter.

Yeah, we should do that.


- Sergio


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


On March 16, 2017, 10:36 p.m., Sergio Pena wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/57626/
> -----------------------------------------------------------
> 
> (Updated March 16, 2017, 10:36 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 
>   
> itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/TestDbNotificationListener.java
>  1cf47c36cb490ce0b17ffe312cd2e9fc4bb7cd9a 
>   metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java 
> bae39acafeb86d04ac8ec66098be125cd3cef3e0 
>   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/2/
> 
> 
> 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