You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by vi...@apache.org on 2018/03/23 23:57:50 UTC
hive git commit: Revert "HIVE-18885 : DbNotificationListener has a
deadlock between Java and DB locks"
Repository: hive
Updated Branches:
refs/heads/branch-2 32055ca4e -> 5842fd2f1
Revert "HIVE-18885 : DbNotificationListener has a deadlock between Java and DB locks"
This reverts commit d32adf51603dd23fe5727b4f1799199bf0e78104. The change was merged by mistake
without being reviewed.
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/5842fd2f
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/5842fd2f
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/5842fd2f
Branch: refs/heads/branch-2
Commit: 5842fd2f19f76691f6762b23d2b1a34b430e572c
Parents: 32055ca
Author: Vihang Karajgaonkar <vi...@cloudera.com>
Authored: Fri Mar 23 16:56:23 2018 -0700
Committer: Vihang Karajgaonkar <vi...@cloudera.com>
Committed: Fri Mar 23 16:57:07 2018 -0700
----------------------------------------------------------------------
.../listener/DbNotificationListener.java | 29 ++++++++++----------
1 file changed, 15 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/5842fd2f/hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/DbNotificationListener.java
----------------------------------------------------------------------
diff --git a/hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/DbNotificationListener.java b/hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/DbNotificationListener.java
index 1989a5e..41347c2 100644
--- a/hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/DbNotificationListener.java
+++ b/hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/DbNotificationListener.java
@@ -83,6 +83,8 @@ public class DbNotificationListener extends MetaStoreEventListener {
private static final Logger LOG = LoggerFactory.getLogger(DbNotificationListener.class.getName());
private static CleanerThread cleaner = null;
+ private static final Object NOTIFICATION_TBL_LOCK = new Object();
+
// This is the same object as super.conf, but it's convenient to keep a copy of it as a
// HiveConf rather than a Configuration.
private HiveConf hiveConf;
@@ -477,14 +479,18 @@ public class DbNotificationListener extends MetaStoreEventListener {
*/
private void process(NotificationEvent event, ListenerEvent listenerEvent) throws MetaException {
event.setMessageFormat(msgFactory.getMessageFormat());
- 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()));
+ 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()));
+ }
}
private static class CleanerThread extends Thread {
@@ -503,13 +509,8 @@ public class DbNotificationListener extends MetaStoreEventListener {
@Override
public void run() {
while (true) {
- synchronized (this) {
- try {
- rs.cleanNotificationEvents(ttl);
- } catch (Exception ex) {
- //catch exceptions so that this thread doesn't die
- LOG.debug("Exception caught while cleaning notifications", ex);
- }
+ synchronized(NOTIFICATION_TBL_LOCK) {
+ rs.cleanNotificationEvents(ttl);
}
LOG.debug("Cleaner thread done");
try {