Repository: airavata Updated Branches: refs/heads/airavata-0.15-release-branch 0223062d8 -> 971f91f2c
Fixed email monitoring issue Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/971f91f2 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/971f91f2 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/971f91f2 Branch: refs/heads/airavata-0.15-release-branch Commit: 971f91f2cd1beae5b7a94ec03685e59c113bba2c Parents: 0223062 Author: Shameera Rathnayaka <[email protected]> Authored: Fri Sep 18 10:38:44 2015 -0400 Committer: Shameera Rathnayaka <[email protected]> Committed: Fri Sep 18 10:38:44 2015 -0400 ---------------------------------------------------------------------- .../gfac/monitor/email/EmailBasedMonitor.java | 114 ++++++++++--------- 1 file changed, 59 insertions(+), 55 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/971f91f2/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java b/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java index 6520973..6c890de 100644 --- a/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java +++ b/modules/gfac/gfac-monitor/gfac-email-monitor/src/main/java/org/apache/airavata/gfac/monitor/email/EmailBasedMonitor.java @@ -181,69 +181,72 @@ public class EmailBasedMonitor implements Runnable{ @Override public void run() { - try { - session = Session.getDefaultInstance(properties); - store = session.getStore(storeProtocol); - store.connect(host, emailAddress, password); - emailFolder = store.getFolder(folderName); - // first time we search for all unread messages. - while (!(stopMonitoring || ServerSettings.isStopAllThreads())) { - Thread.sleep(ServerSettings.getEmailMonitorPeriod());// sleep a bit - get a rest till job finishes - if (jobMonitorMap.isEmpty()) { - log.info("[EJM]: Job Monitor Map is empty, no need to retrieve emails"); - continue; - } else { - log.info("[EJM]: " + jobMonitorMap.size() + " job/s in job monitor map"); - } - if (!store.isConnected()) { - store.connect(); - emailFolder = store.getFolder(folderName); - } - emailFolder.open(Folder.READ_WRITE); - if (emailFolder.isOpen()) { - // flush if any message left in flushUnseenMessage - if (flushUnseenMessages != null && flushUnseenMessages.length > 0) { - try { - emailFolder.setFlags(flushUnseenMessages, new Flags(Flags.Flag.SEEN), false); - flushUnseenMessages = null; - } catch (MessagingException e) { - if (!store.isConnected()) { - store.connect(); + + while (!stopMonitoring && !ServerSettings.isStopAllThreads()) { + try { + session = Session.getDefaultInstance(properties); + store = session.getStore(storeProtocol); + store.connect(host, emailAddress, password); + emailFolder = store.getFolder(folderName); + // first time we search for all unread messages. + while (!(stopMonitoring || ServerSettings.isStopAllThreads())) { + Thread.sleep(ServerSettings.getEmailMonitorPeriod());// sleep a bit - get a rest till job finishes + if (jobMonitorMap.isEmpty()) { + log.info("[EJM]: Job Monitor Map is empty, no need to retrieve emails"); + continue; + } else { + log.info("[EJM]: " + jobMonitorMap.size() + " job/s in job monitor map"); + } + if (!store.isConnected()) { + store.connect(); + emailFolder = store.getFolder(folderName); + } + emailFolder.open(Folder.READ_WRITE); + if (emailFolder.isOpen()) { + // flush if any message left in flushUnseenMessage + if (flushUnseenMessages != null && flushUnseenMessages.length > 0) { + try { emailFolder.setFlags(flushUnseenMessages, new Flags(Flags.Flag.SEEN), false); flushUnseenMessages = null; + } catch (MessagingException e) { + if (!store.isConnected()) { + store.connect(); + emailFolder.setFlags(flushUnseenMessages, new Flags(Flags.Flag.SEEN), false); + flushUnseenMessages = null; + } } } + // read unread messages + Message[] searchMessages = getMessagesToProcess(); + if (searchMessages == null || searchMessages.length == 0) { + log.info("[EJM]: No new email messages"); + } else { + log.info("[EJM]: " + searchMessages.length + " new email/s received"); + } + processMessages(searchMessages); + emailFolder.close(false); } - // read unread messages - Message[] searchMessages = getMessagesToProcess(); - if (searchMessages == null || searchMessages.length == 0) { - log.info("[EJM]: No new email messages"); - } else { - log.info("[EJM]: " + searchMessages.length + " new email/s received"); - } - processMessages(searchMessages); } - emailFolder.close(false); - } - } catch (MessagingException e) { - log.error("[EJM]: Couldn't connect to the store ", e); - } catch (InterruptedException e) { - log.error("[EJM]: Interrupt exception while sleep ", e); - } catch (AiravataException e) { - log.error("[EJM]: UnHandled arguments ", e); - } finally { - try { - emailFolder.close(false); - store.close(); } catch (MessagingException e) { - log.error("[EJM]: Store close operation failed, couldn't close store", e); + log.error("[EJM]: Couldn't connect to the store ", e); + } catch (InterruptedException e) { + log.error("[EJM]: Interrupt exception while sleep ", e); + } catch (AiravataException e) { + log.error("[EJM]: UnHandled arguments ", e); + } catch (Throwable e) { + log.error("[EJM]: Caught a throwable ", e); + } finally { + try { + emailFolder.close(false); + store.close(); + } catch (MessagingException e) { + log.error("[EJM]: Store close operation failed, couldn't close store", e); + } catch (Throwable e) { + log.error("[EJM]: Caught a throwable while closing email store ", e); + } } } - // Recursively try to connect to email server and monitor - if (!(stopMonitoring || ServerSettings.isStopAllThreads())) { - log.info("[EJM]: Retry email monitoring on exceptions"); - run(); - } + log.info("[EJM]: Email monitoring daemon stopped"); } @@ -335,7 +338,8 @@ public class EmailBasedMonitor implements Runnable{ flushUnseenMessages = unseenMessages; // anyway we need to push this update. throw e1; } - + } else { + flushUnseenMessages = unseenMessages; // anyway we need to push this update. } } }
