[ https://issues.apache.org/jira/browse/AMBARI-21248?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dmytro Sen updated AMBARI-21248: -------------------------------- Status: Open (was: Patch Available) > Exception needs to be handled properly for mail alert > ----------------------------------------------------- > > Key: AMBARI-21248 > URL: https://issues.apache.org/jira/browse/AMBARI-21248 > Project: Ambari > Issue Type: Bug > Components: ambari-server > Affects Versions: 2.4.2 > Reporter: Richard Zang > Assignee: Dmytro Sen > Priority: Critical > Fix For: 2.5.2 > > Attachments: AMBARI-21248_2.patch > > > In org.apache.ambari.server.state.services.AlertNoticeDispatchService, we > have below code snippet: > {code} > ... > protected void runOneIteration() throws Exception { > … > String targetType = target.getNotificationType(); > NotificationDispatcher dispatcher = > m_dispatchFactory.getDispatcher(targetType); > … > if (dispatcher.isDigestSupported()) { > ... > {code} > If the database has a change to AlertTargetEntity's targetType column > (unlikely but let's assume it happened), then dispatcher can be null and the > subsequent if clause will throw an exception. In > https://github.com/google/guava/blob/master/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java, > we see that the exception may happen silently since shutDown() and > notifyFailed() does not log anything. > ... > {code} > class Task implements Runnable { > @Override > public void run() { > lock.lock(); > try { > if (runningTask.isCancelled()) { // task may have been cancelled > while blocked on the lock. return; } > AbstractScheduledService.this.runOneIteration(); > } catch (Throwable t) { > try { > shutDown(); > } catch (Exception ignored) { > logger.log(Level.WARNING, "Error while attempting to shut > down the service after failure.", ignored); > } > notifyFailed(t); > runningTask.cancel(false); // prevent future invocations. > } finally { > lock.unlock(); > } > } > } > } > {code} > So, runOneIteration will shutdown the scheduler if it hits an uncaught > exception. We should wrap a try/catch. -- This message was sent by Atlassian JIRA (v6.4.14#64029)