This is an automated email from the ASF dual-hosted git repository. sankarh pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push: new 5ff5657 HIVE-19430: ObjectStore.cleanNotificationEvents OutOfMemory on large number of pending events (Ashutosh Bapat, reviewed by Sankar Hariappan, Vihang Karajgaonkar) 5ff5657 is described below commit 5ff5657dd34f2d37f4cb4ad90a09cb624b45b239 Author: Ashutosh Bapat <aba...@cloudera.com> AuthorDate: Mon Feb 18 12:29:01 2019 +0530 HIVE-19430: ObjectStore.cleanNotificationEvents OutOfMemory on large number of pending events (Ashutosh Bapat, reviewed by Sankar Hariappan, Vihang Karajgaonkar) Signed-off-by: Sankar Hariappan <sank...@apache.org> --- .../org/apache/hive/hcatalog/listener/DbNotificationListener.java | 5 +---- .../java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java | 5 +++++ .../src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java | 5 +++++ 3 files changed, 11 insertions(+), 4 deletions(-) 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 963b227..e611394 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 @@ -1142,10 +1142,7 @@ public class DbNotificationListener extends TransactionalMetaStoreEventListener } catch (Exception ex) { //catching exceptions here makes sure that the thread doesn't die in case of unexpected //exceptions - LOG.warn( - "Exception received while cleaning notifications. More details can be found in debug mode" - + ex.getMessage()); - LOG.debug(ex.getMessage(), ex); + LOG.warn("Exception received while cleaning notifications: ", ex); } LOG.debug("Cleaner thread done"); diff --git a/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java b/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java index 7c1e30a..3a9912f 100644 --- a/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java +++ b/standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/conf/MetastoreConf.java @@ -555,6 +555,11 @@ public class MetastoreConf { EVENT_DB_LISTENER_TTL("metastore.event.db.listener.timetolive", "hive.metastore.event.db.listener.timetolive", 86400, TimeUnit.SECONDS, "time after which events will be removed from the database listener queue"), + EVENT_CLEAN_MAX_EVENTS("metastore.event.db.clean.maxevents", + "hive.metastore.event.db.clean.maxevents", 10000, + "Limit on number events to be cleaned at a time in metastore cleanNotificationEvents " + + "call, to avoid OOM. The configuration is not effective when set to zero or " + + "a negative value."), EVENT_DB_LISTENER_CLEAN_INTERVAL("metastore.event.db.listener.clean.interval", "hive.metastore.event.db.listener.clean.interval", 7200, TimeUnit.SECONDS, "sleep interval between each run for cleanup of events from the database listener queue"), diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java index c0bae3b..f9a4e48 100644 --- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -10080,6 +10080,11 @@ public class ObjectStore implements RawStore, Configurable { int tooOld = (tmp > Integer.MAX_VALUE) ? 0 : (int) tmp; query = pm.newQuery(MNotificationLog.class, "eventTime < tooOld"); query.declareParameters("java.lang.Integer tooOld"); + + int max_events = MetastoreConf.getIntVar(conf, MetastoreConf.ConfVars.EVENT_CLEAN_MAX_EVENTS); + max_events = max_events > 0 ? max_events : Integer.MAX_VALUE; + query.setRange(0, max_events); + Collection<MNotificationLog> toBeRemoved = (Collection) query.execute(tooOld); if (CollectionUtils.isNotEmpty(toBeRemoved)) { pm.deletePersistentAll(toBeRemoved);