anishek created HIVE-16738:
------------------------------

             Summary: Notification ID generation in DBNotification might not be 
unique
                 Key: HIVE-16738
                 URL: https://issues.apache.org/jira/browse/HIVE-16738
             Project: Hive
          Issue Type: Bug
          Components: HiveServer2
    Affects Versions: 3.0.0
            Reporter: anishek
            Assignee: anishek
             Fix For: 3.0.0


Going to explain the problem in scope of "replication" feature for hive 2 that 
is being built, as it is easier to explain:

To allow replication to work we need to set 
"hive.metastore.transactional.event.listeners"  to DBNotificationListener. For 
use cases where there are multiple HiveServer2 Instances running 
{code}
 private void process(NotificationEvent event, ListenerEvent listenerEvent) 
throws MetaException {
    event.setMessageFormat(msgFactory.getMessageFormat());
    synchronized (NOTIFICATION_TBL_LOCK) {
      LOG.debug("DbNotificationListener: Processing : {}:{}", 
event.getEventId(),
          event.getMessage());
      HMSHandler.getMSForConf(hiveConf).addNotificationEvent(event);
    }

      // Set the DB_NOTIFICATION_EVENT_ID for future reference by other 
listeners.
      if (event.isSetEventId()) {
        listenerEvent.putParameter(
            MetaStoreEventListenerConstants.DB_NOTIFICATION_EVENT_ID_KEY_NAME,
            Long.toString(event.getEventId()));
      }
  }
{code}
the above code in DBNotificationListner having the object lock wont be 
guarantee enough to make sure that all events get a unique id. The transaction 
isolation level at the db "read-comitted" or "repeatable-read"  would  also not 
guarantee the same, unless a lock is at the db level preferably on table 
{{NOTIFICATION_SEQUENCE}} which only has one row.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to