[ 
https://issues.apache.org/jira/browse/AMBARI-21248?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dmytro Sen updated AMBARI-21248:
--------------------------------
    Status: Patch Available  (was: Open)

> 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_4.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)

Reply via email to