azkaban-aplcache

Avoid sending metrics for email sending failures caused by

6/29/2018 6:54:09 PM

Details

diff --git a/azkaban-common/src/main/java/azkaban/utils/Emailer.java b/azkaban-common/src/main/java/azkaban/utils/Emailer.java
index 6247b59..2c07308 100644
--- a/azkaban-common/src/main/java/azkaban/utils/Emailer.java
+++ b/azkaban-common/src/main/java/azkaban/utils/Emailer.java
@@ -29,6 +29,7 @@ import azkaban.sla.SlaOption;
 import java.util.List;
 import javax.inject.Inject;
 import javax.inject.Singleton;
+import javax.mail.internet.AddressException;
 import org.apache.log4j.Logger;
 
 @Singleton
@@ -147,7 +148,9 @@ public class Emailer extends AbstractMailer implements Alerter {
         this.commonMetrics.markSendEmailSuccess();
       } catch (final Exception e) {
         logger.error("Failed to send " + operation, e);
-        this.commonMetrics.markSendEmailFail();
+        if (!(e instanceof AddressException)) {
+          this.commonMetrics.markSendEmailFail();
+        }
       }
     }
   }
diff --git a/azkaban-common/src/test/java/azkaban/utils/EmailerTest.java b/azkaban-common/src/test/java/azkaban/utils/EmailerTest.java
index 5302156..f7fef9a 100644
--- a/azkaban-common/src/test/java/azkaban/utils/EmailerTest.java
+++ b/azkaban-common/src/test/java/azkaban/utils/EmailerTest.java
@@ -17,7 +17,9 @@ package azkaban.utils;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -31,6 +33,7 @@ import azkaban.test.executions.ExecutionsTestUtil;
 import com.codahale.metrics.MetricRegistry;
 import java.util.ArrayList;
 import java.util.List;
+import javax.mail.internet.AddressException;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -126,4 +129,17 @@ public class EmailerTest {
     verify(this.message).setSubject("subject");
     verify(this.message).setMimeType("text/html");
   }
+
+  @Test
+  public void testSendEmailToInvalidAddress() throws Exception {
+    doThrow(AddressException.class).when(this.message).sendEmail();
+    final Flow flow = this.project.getFlow("jobe");
+    flow.addFailureEmails(this.receiveAddrList);
+
+    final ExecutableFlow exFlow = new ExecutableFlow(this.project, flow);
+    final CommonMetrics commonMetrics = mock(CommonMetrics.class);
+    final Emailer emailer = new Emailer(this.props, commonMetrics, this.messageCreator);
+    emailer.alertOnError(exFlow);
+    verify(commonMetrics, never()).markSendEmailFail();
+  }
 }