This is an automated email from the ASF dual-hosted git repository.

dsen pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 1a71103  [AMBARI-25131] Alert notification properties are wiped after 
enabling/disabling the notification (dsen) (#2786)
1a71103 is described below

commit 1a711038698490b1f6423e3e4801ae98598d0366
Author: Dmitry Sen <d...@apache.org>
AuthorDate: Thu Jan 31 14:54:24 2019 +0700

    [AMBARI-25131] Alert notification properties are wiped after 
enabling/disabling the notification (dsen) (#2786)
---
 .../internal/AlertTargetResourceProvider.java      | 17 ++++++--
 .../internal/AlertTargetResourceProviderTest.java  | 47 ++++++++++++++++++++++
 2 files changed, 61 insertions(+), 3 deletions(-)

diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
index dc0fd57..be18477 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
@@ -422,9 +422,14 @@ public class AlertTargetResourceProvider extends
       entity.setNotificationType(notificationType);
     }
 
-    String properties = s_gson.toJson(extractProperties(requestMap));
-    if (!StringUtils.isEmpty(properties)) {
-      entity.setProperties(properties);
+    Map<String, Object> propertiesMap = extractProperties(requestMap);
+
+    if (propertiesMap != null) {
+      String properties = s_gson.toJson(propertiesMap);
+      if (!StringUtils.isEmpty(properties)) {
+        LOG.debug("Updating Alert Target properties map to: " + properties);
+        entity.setProperties(properties);
+      }
     }
 
     // a null alert state implies that the key was not set and no update
@@ -533,17 +538,23 @@ public class AlertTargetResourceProvider extends
   private Map<String, Object> extractProperties(Map<String, Object> 
requestMap) {
     Map<String, Object> normalizedMap = new HashMap<>(
       requestMap.size());
+    boolean has_properties = false;
 
     for (Entry<String, Object> entry : requestMap.entrySet()) {
       String key = entry.getKey();
       String propCat = PropertyHelper.getPropertyCategory(key);
 
       if (propCat.equals(ALERT_TARGET_PROPERTIES)) {
+        has_properties = true;
         String propKey = PropertyHelper.getPropertyName(key);
         normalizedMap.put(propKey, entry.getValue());
       }
     }
 
+    if (!has_properties) {
+      normalizedMap = null;
+    }
+
     return normalizedMap;
   }
 
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProviderTest.java
index efedd2b..b20dd9f 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProviderTest.java
@@ -1007,6 +1007,53 @@ public class AlertTargetResourceProviderTest {
     verify(m_amc, m_dao);
   }
 
+  @Test
+  public void testEnable() throws Exception {
+    Capture<AlertTargetEntity> entityCapture = EasyMock.newCapture();
+    m_dao.create(capture(entityCapture));
+    expectLastCall().times(1);
+
+    AlertTargetEntity target = new AlertTargetEntity();
+    target.setEnabled(false);
+    target.setProperties("{prop1=val1}");
+    expect(m_dao.findTargetById(ALERT_TARGET_ID)).andReturn(target).times(1);
+
+    expect(m_dao.merge(capture(entityCapture))).andReturn(target).once();
+
+    replay(m_amc, m_dao);
+
+    
SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator());
+
+    AlertTargetResourceProvider provider = createProvider(m_amc);
+    Map<String, Object> requestProps = getCreationProperties();
+    Request request = PropertyHelper.getCreateRequest(
+      Collections.singleton(requestProps), null);
+    provider.createResources(request);
+
+    // create new properties, and include the ID since we're not going through
+    // a service layer which would add it for us automatically
+    requestProps = new HashMap<>();
+    requestProps.put(AlertTargetResourceProvider.ALERT_TARGET_ID,
+      ALERT_TARGET_ID.toString());
+
+    requestProps.put(AlertTargetResourceProvider.ALERT_TARGET_ENABLED,
+      "true");
+
+    Predicate predicate = new PredicateBuilder().property(
+      AlertTargetResourceProvider.ALERT_TARGET_ID).equals(
+      ALERT_TARGET_ID.toString()).toPredicate();
+
+    request = PropertyHelper.getUpdateRequest(requestProps, null);
+    provider.updateResources(request, predicate);
+
+    assertTrue(entityCapture.hasCaptured());
+
+    AlertTargetEntity entity = entityCapture.getValue();
+    assertTrue("{prop1=val1}".equals(entity.getProperties()));
+    assertTrue(entity.isEnabled());
+    verify(m_amc, m_dao);
+  }
+
   /**
    * @param amc
    * @return

Reply via email to