ambari-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Richard Zang (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (AMBARI-21248) Exception needs to be handled properly for mail alert
Date Wed, 14 Jun 2017 17:28:00 GMT

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

Richard Zang updated AMBARI-21248:
----------------------------------
    Priority: Critical  (was: Major)

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

Mime
View raw message