AMBARI-17012. Handle SNMP dispatch behavior if the reusable UDP transport goes 
away. (mpapirkovskyy)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/0480c6be
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/0480c6be
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/0480c6be

Branch: refs/heads/branch-2.4
Commit: 0480c6becf2dfe62b1eb6c74f61ec444014f44b2
Parents: 5d9348c
Author: Myroslav Papirkovskyi <[email protected]>
Authored: Thu Jun 2 19:12:11 2016 +0300
Committer: Myroslav Papirkovskyi <[email protected]>
Committed: Thu Jun 2 19:16:32 2016 +0300

----------------------------------------------------------------------
 .../dispatchers/SNMPDispatcher.java             |  5 ++++
 .../dispatchers/SNMPDispatcherTest.java         | 26 ++++++++++++++++++++
 2 files changed, 31 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0480c6be/ambari-server/src/main/java/org/apache/ambari/server/notifications/dispatchers/SNMPDispatcher.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/notifications/dispatchers/SNMPDispatcher.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/notifications/dispatchers/SNMPDispatcher.java
index 24681d1..22a78ef 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/notifications/dispatchers/SNMPDispatcher.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/notifications/dispatchers/SNMPDispatcher.java
@@ -160,6 +160,7 @@ public class SNMPDispatcher implements 
NotificationDispatcher {
     } catch (Exception ex) {
       LOG.error("Error occurred during SNMP trap dispatching.", ex);
       failureCallback(notification);
+      transportMapping = null;
     }
   }
 
@@ -431,4 +432,8 @@ public class SNMPDispatcher implements 
NotificationDispatcher {
   public Integer getPort() {
     return port;
   }
+
+  protected UdpTransportMapping getTransportMapping() {
+    return transportMapping;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/0480c6be/ambari-server/src/test/java/org/apache/ambari/server/notifications/dispatchers/SNMPDispatcherTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/notifications/dispatchers/SNMPDispatcherTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/notifications/dispatchers/SNMPDispatcherTest.java
index e5ea0bf..bca0e8a 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/notifications/dispatchers/SNMPDispatcherTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/notifications/dispatchers/SNMPDispatcherTest.java
@@ -30,6 +30,7 @@ import org.snmp4j.Target;
 import org.snmp4j.mp.SnmpConstants;
 import org.snmp4j.smi.VariableBinding;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -55,6 +56,31 @@ public class SNMPDispatcherTest {
   }
 
   @Test
+  public void testDispatchUdpTransportMappingCrash() throws Exception {
+    SNMPDispatcher dispatcher = spy(new SNMPDispatcher(DEFAULT_SNMP_PORT));
+    SNMPDispatcher.SnmpVersion snmpVersion = SNMPDispatcher.SnmpVersion.SNMPv1;
+    Notification notification = mock(Notification.class);
+    notification.Callback = mock(DispatchCallback.class);
+    notification.CallbackIds = mock(List.class);
+    Map<String, String> properties = new HashMap<String, String>();
+    properties.put(SNMPDispatcher.SUBJECT_OID_PROPERTY, "1");
+    properties.put(SNMPDispatcher.BODY_OID_PROPERTY, "2");
+    properties.put(SNMPDispatcher.PORT_PROPERTY, "3");
+    properties.put(SNMPDispatcher.COMMUNITY_PROPERTY, "4");
+    properties.put(SNMPDispatcher.SNMP_VERSION_PROPERTY, "SNMPv1");
+    properties.put(SNMPDispatcher.TRAP_OID_PROPERTY, "1.3.6.1.6.3.1.1.5.4");
+    notification.DispatchProperties = properties;
+    notification.Body = "body";
+    notification.Subject = "subject";
+    notification.Recipients = Arrays.asList(new Recipient());
+    doThrow(new IOException()).when(dispatcher).sendTraps(notification, 
snmpVersion);
+    dispatcher.dispatch(notification);
+    verify(notification.Callback).onFailure(notification.CallbackIds);
+    verify(notification.Callback, never()).onSuccess(notification.CallbackIds);
+    assertNull(dispatcher.getTransportMapping());
+  }
+
+  @Test
   public void testDispatch_notDefinedProperties() throws Exception {
     SNMPDispatcher dispatcher = new SNMPDispatcher(DEFAULT_SNMP_PORT);
     Notification notification = mock(Notification.class);

Reply via email to