Richard Zang created AMBARI-21248: ------------------------------------- Summary: 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 Fix For: 2.5.2
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)