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

avijayan 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 bf55629  Revert "AMBARI-23565. Restore configs does not work. (#1130)"
bf55629 is described below

commit bf55629ce21a7da27778e252e67fd0a3841adc27
Author: Aravindan Vijayan <avija...@hortonworks.com>
AuthorDate: Mon Apr 30 10:34:27 2018 -0700

    Revert "AMBARI-23565. Restore configs does not work. (#1130)"
    
    This reverts commit 43cff24fc62604dee9726349e34ff72f83c43cc4.
---
 .../controller/AmbariManagementControllerImpl.java |   6 +-
 .../internal/ConfigGroupResourceProvider.java      |  17 ----
 .../apache/ambari/server/state/ConfigHelper.java   | 111 +++------------------
 .../apache/ambari/server/state/UpgradeHelper.java  |  12 +--
 .../ambari/server/state/cluster/ClusterImpl.java   |   5 +-
 .../ambari/server/state/cluster/ClustersImpl.java  |  18 ----
 .../server/upgrade/AbstractUpgradeCatalog.java     |  10 +-
 .../AmbariCustomCommandExecutionHelperTest.java    |  12 ---
 .../AmbariManagementControllerImplTest.java        |   8 ++
 .../internal/ConfigGroupResourceProviderTest.java  |  18 +---
 .../ambari/server/state/cluster/ClusterTest.java   |   8 ++
 .../server/upgrade/UpgradeCatalog252Test.java      |  16 +--
 .../server/upgrade/UpgradeCatalog260Test.java      |  29 +++---
 .../server/upgrade/UpgradeCatalog270Test.java      |  13 +--
 14 files changed, 71 insertions(+), 212 deletions(-)

diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index 20f9b8e..ba2ba3a 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
@@ -1868,6 +1868,8 @@ public class AmbariManagementControllerImpl implements 
AmbariManagementControlle
         }
       }
     }
+    
m_metadataHolder.get().updateData(getClusterMetadataOnConfigsUpdate(cluster));
+    m_agentConfigsHolder.get().updateData(cluster.getClusterId(), null);
 
     StackId currentVersion = cluster.getCurrentStackVersion();
     StackId desiredVersion = cluster.getDesiredStackVersion();
@@ -2012,10 +2014,6 @@ public class AmbariManagementControllerImpl implements 
AmbariManagementControlle
         }
       }
     }
-    if (serviceConfigVersionResponse != null) {
-      
configHelper.updateAgentConfigs(Collections.singletonMap(cluster.getClusterName(),
-          
Collections.singleton(serviceConfigVersionResponse.getServiceName())));
-    }
 
     if (requestStageContainer != null) {
       requestStageContainer.persist();
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
index ff25e30..6c55c85 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
@@ -58,7 +58,6 @@ import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
 import org.apache.ambari.server.state.ConfigFactory;
-import org.apache.ambari.server.state.ConfigHelper;
 import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.state.configgroup.ConfigGroup;
 import org.apache.ambari.server.state.configgroup.ConfigGroupFactory;
@@ -70,7 +69,6 @@ import org.slf4j.LoggerFactory;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Sets;
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 
 @StaticallyInject
 public class ConfigGroupResourceProvider extends
@@ -143,9 +141,6 @@ public class ConfigGroupResourceProvider extends
   @Inject
   private static ConfigFactory configFactory;
 
-  @Inject
-  private static Provider<ConfigHelper> m_configHelper;
-
   /**
    * Create a  new resource provider for the given management controller.
    *
@@ -519,9 +514,6 @@ public class ConfigGroupResourceProvider extends
         cluster.getClusterName(), getManagementController().getAuthName(), 
configGroup.getName(), request.getId());
 
     cluster.deleteConfigGroup(request.getId());
-
-    
m_configHelper.get().updateAgentConfigs(Collections.singletonMap(request.getClusterName(),
-        Collections.singleton(configGroup.getServiceName())));
   }
 
   private void validateRequest(ConfigGroupRequest request) {
@@ -555,7 +547,6 @@ public class ConfigGroupResourceProvider extends
     ConfigGroupFactory configGroupFactory = getManagementController()
       .getConfigGroupFactory();
 
-    Map<String, Set<String>> updatedServices = new HashMap<>();
     for (ConfigGroupRequest request : requests) {
 
       Cluster cluster;
@@ -643,12 +634,8 @@ public class ConfigGroupResourceProvider extends
         configGroup.getTag(), configGroup.getDescription(), null, null);
 
       configGroupResponses.add(response);
-      updatedServices.putIfAbsent(cluster.getClusterName(), new HashSet<>());
-      updatedServices.get(cluster.getClusterName()).add(serviceName);
     }
 
-    m_configHelper.get().updateAgentConfigs(updatedServices);
-
     return configGroupResponses;
   }
 
@@ -660,7 +647,6 @@ public class ConfigGroupResourceProvider extends
 
     Clusters clusters = getManagementController().getClusters();
 
-    Map<String, Set<String>> updatedServices = new HashMap<>();
     for (ConfigGroupRequest request : requests) {
 
       Cluster cluster;
@@ -769,15 +755,12 @@ public class ConfigGroupResourceProvider extends
         versionTags.add(tagsMap);
         configGroupResponse.setVersionTags(versionTags);
         getManagementController().saveConfigGroupUpdate(request, 
configGroupResponse);
-        updatedServices.putIfAbsent(cluster.getClusterName(), new HashSet<>());
-        updatedServices.get(cluster.getClusterName()).add(serviceName);
       } else {
         LOG.warn("Could not determine service name for config group {}, 
service config version not created",
             configGroup.getId());
       }
     }
 
-    m_configHelper.get().updateAgentConfigs(updatedServices);
   }
 
   @SuppressWarnings("unchecked")
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java 
b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
index 7327f43..6371302 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigHelper.java
@@ -1180,9 +1180,8 @@ public class ConfigHelper {
       || !Maps.difference(oldConfigProperties, properties).areEqual()) {
       if (createConfigType(cluster, stackId, controller, configType, 
properties,
         propertiesAttributes, authenticatedUserName, serviceVersionNote)) {
-
-        String serviceName = 
cluster.getServiceForConfigTypes(Collections.singletonList(configType));
-        updateAgentConfigs(Collections.singletonMap(cluster.getClusterName(), 
Collections.singleton(serviceName)));
+        
m_metadataHolder.get().updateData(m_ambariManagementController.get().getClusterMetadataOnConfigsUpdate(cluster));
+        m_agentConfigsHolder.get().updateData(cluster.getClusterId(), null);
       }
     }
   }
@@ -1193,9 +1192,8 @@ public class ConfigHelper {
 
     if (createConfigType(cluster, stackId, controller, configType, properties,
       new HashMap<>(), authenticatedUserName, serviceVersionNote)) {
-
-      String serviceName = 
cluster.getServiceForConfigTypes(Collections.singletonList(configType));
-      updateAgentConfigs(Collections.singletonMap(cluster.getClusterName(), 
Collections.singleton(serviceName)));
+      
m_metadataHolder.get().updateData(m_ambariManagementController.get().getClusterMetadataOnConfigsUpdate(cluster));
+      m_agentConfigsHolder.get().updateData(cluster.getClusterId(), null);
     }
   }
 
@@ -1500,99 +1498,15 @@ public class ConfigHelper {
   }
 
   /**
-   * Checks populated services for staled configs and updates agent configs.
-   * Method retrieves actual agent configs and compares them with just 
generated to identify stale configs.
-   * Then config updates are sent to agents.
-   * @param updatedServices service names mapped by cluster names
-   * @throws AmbariException
-   */
-  public void updateAgentConfigs(Map<String, Set<String>> updatedServices) 
throws AmbariException {
-
-    // get all used clusters in request
-    List<Cluster> clustersInUse = new ArrayList<>();
-    for (String clusterName : updatedServices.keySet()) {
-      Cluster cluster;
-      cluster = clusters.getCluster(clusterName);
-      clustersInUse.add(cluster);
-    }
-
-    // get all current and previous host configs
-    Map<Long, AgentConfigsUpdateEvent> currentConfigEvents = new HashMap<>();
-    Map<Long, AgentConfigsUpdateEvent> previousConfigEvents = new HashMap<>();
-    for (Cluster cluster : clustersInUse) {
-      for (Host host : cluster.getHosts()) {
-        Long hostId = host.getHostId();
-        if (!currentConfigEvents.containsKey(hostId)) {
-          currentConfigEvents.put(host.getHostId(), 
m_agentConfigsHolder.get().getCurrentData(hostId));
-        }
-        if (!previousConfigEvents.containsKey(host.getHostId())) {
-          previousConfigEvents.put(host.getHostId(), 
m_agentConfigsHolder.get().getData(hostId));
-        }
-      }
-    }
-
-    for (Cluster cluster : clustersInUse) {
-      Map<Long, Map<String, Collection<String>>> changedConfigs = new 
HashMap<>();
-      for (Host host : cluster.getHosts()) {
-        AgentConfigsUpdateEvent currentConfigData = 
currentConfigEvents.get(host.getHostId());
-        AgentConfigsUpdateEvent previousConfigsData = 
previousConfigEvents.get(host.getHostId());
-
-        SortedMap<String, SortedMap<String, String>> currentConfigs =
-            
currentConfigData.getClustersConfigs().get(Long.toString(cluster.getClusterId())).getConfigurations();
-        SortedMap<String, SortedMap<String, String>> previousConfigs =
-            
previousConfigsData.getClustersConfigs().get(Long.toString(cluster.getClusterId())).getConfigurations();
-
-        Map<String, Collection<String>> changedConfigsHost = new HashMap<>();
-        for (String currentConfigType : currentConfigs.keySet()) {
-          if (previousConfigs.containsKey(currentConfigType)) {
-            Set<String> changedKeys = new HashSet<>();
-            Map<String, String> currentTypedConfigs = 
currentConfigs.get(currentConfigType);
-            Map<String, String> previousTypedConfigs = 
previousConfigs.get(currentConfigType);
-
-            for (String currentKey : currentTypedConfigs.keySet()) {
-              if (!previousTypedConfigs.containsKey(currentKey)
-                  || 
!currentTypedConfigs.get(currentKey).equals(previousTypedConfigs.get(currentKey)))
 {
-                changedKeys.add(currentKey);
-              }
-            }
-            for (String previousKey : previousTypedConfigs.keySet()) {
-              if (!currentTypedConfigs.containsKey(previousKey)) {
-                changedKeys.add(previousKey);
-              }
-            }
-
-            if (!changedKeys.isEmpty()) {
-              changedConfigsHost.put(currentConfigType, changedKeys);
-            }
-          } else {
-            changedConfigsHost.put(currentConfigType, 
currentConfigs.get(currentConfigType).keySet());
-          }
-        }
-        for (String previousConfigType : previousConfigs.keySet()) {
-          if (!currentConfigs.containsKey(previousConfigType)) {
-            changedConfigsHost.put(previousConfigType, 
previousConfigs.get(previousConfigType).keySet());
-          }
-        }
-        changedConfigs.put(host.getHostId(), changedConfigsHost);
-      }
-      for (String serviceName : updatedServices.get(cluster.getClusterName())) 
{
-        checkStaleConfigsStatusOnConfigsUpdate(cluster.getClusterId(), 
serviceName, changedConfigs);
-      }
-
-      
m_metadataHolder.get().updateData(m_ambariManagementController.get().getClusterMetadataOnConfigsUpdate(cluster));
-      m_agentConfigsHolder.get().updateData(cluster.getClusterId(), null);
-    }
-  }
-
-  /**
    * Checks configs are stale after specified config changes for service's 
components.
    * @param clusterId cluster with changed config
    * @param serviceName service for changed config
+   * @param hostNames hosts with changed config, can be null
    * @param changedConfigs map of config types to collections of changed 
properties' names.
    * @throws AmbariException
    */
-  public void checkStaleConfigsStatusOnConfigsUpdate(Long clusterId, String 
serviceName,
-                                                     Map<Long, Map<String, 
Collection<String>>> changedConfigs) throws AmbariException {
+  public void checkStaleConfigsStatusOnConfigsUpdate(Long clusterId, String 
serviceName, Collection<String> hostNames,
+                                                     Map<String, 
Collection<String>> changedConfigs) throws AmbariException {
     if (MapUtils.isEmpty(changedConfigs)) {
       return;
     }
@@ -1603,11 +1517,16 @@ public class ConfigHelper {
     Service service = clusters.getCluster(clusterId).getService(serviceName);
     for (ServiceComponent serviceComponent : 
service.getServiceComponents().values()) {
       String serviceComponentHostName = serviceComponent.getName();
+      Set<String> hosts;
+      if (CollectionUtils.isNotEmpty(hostNames)) {
+        hosts = new HashSet<>(hostNames);
+      } else {
+        hosts = serviceComponent.getServiceComponentsHosts();
+      }
       for (ServiceComponentHost serviceComponentHost : 
serviceComponent.getServiceComponentHosts().values()) {
-        if 
(changedConfigs.keySet().contains(serviceComponentHost.getHost().getHostId())) {
+        if (hosts.contains(serviceComponentHost.getHostName())) {
           boolean staleConfigs = 
checkStaleConfigsStatusForHostComponent(serviceComponentHost,
-              changedConfigs.get(serviceComponentHost.getHost().getHostId()));
-
+              changedConfigs);
           if (wasStaleConfigsStatusUpdated(clusterId, 
serviceComponentHost.getHost().getHostId(),
               serviceName, serviceComponentHostName, staleConfigs)) {
             
serviceComponentHost.setRestartRequiredWithoutEventPublishing(staleConfigs);
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java 
b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
index cd2efcd..00c6bcc 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/UpgradeHelper.java
@@ -950,11 +950,10 @@ public class UpgradeHelper {
 
     Set<String> clusterConfigTypes = new HashSet<>();
     Set<String> processedClusterConfigTypes = new HashSet<>();
-    Set<String> servicesWithUpdatedConfigs = new HashSet<>();
+    boolean configsChanged = false;
 
     // merge or revert configurations for any service that needs it
     for (String serviceName : servicesInUpgrade) {
-      boolean configsChanged = false;
       RepositoryVersionEntity sourceRepositoryVersion = 
upgradeContext.getSourceRepositoryVersion(serviceName);
       RepositoryVersionEntity targetRepositoryVersion = 
upgradeContext.getTargetRepositoryVersion(serviceName);
       StackId sourceStackId = sourceRepositoryVersion.getStackId();
@@ -1157,13 +1156,10 @@ public class UpgradeHelper {
             newServiceDefaultConfigsByType, userName, serviceVersionNote);
         configsChanged = true;
       }
-      if (configsChanged) {
-        servicesWithUpdatedConfigs.add(serviceName);
-      }
     }
-    if (!servicesWithUpdatedConfigs.isEmpty()) {
-      
m_configHelperProvider.get().updateAgentConfigs(Collections.singletonMap(cluster.getClusterName(),
-          servicesWithUpdatedConfigs));
+    if (configsChanged) {
+      
m_metadataHolder.get().updateData(m_controllerProvider.get().getClusterMetadataOnConfigsUpdate(cluster));
+      m_agentConfigsHolder.get().updateData(cluster.getClusterId(), null);
     }
   }
 
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
index a71e7c8..ca4719f 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
@@ -1615,6 +1615,7 @@ public class ClusterImpl implements Cluster {
       }
       STOMPUpdatePublisher.publish(new ConfigsUpdateEvent(serviceConfigEntity,
           configGroup == null ? null : configGroup.getName(), groupHostNames, 
changedConfigs.keySet()));
+      
configHelper.checkStaleConfigsStatusOnConfigsUpdate(clusterEntity.getClusterId(),
 serviceName, groupHostNames, changedConfigs);
     } finally {
       clusterGlobalLock.writeLock().unlock();
     }
@@ -1954,6 +1955,7 @@ public class ClusterImpl implements Cluster {
         configGroupName,
         groupHostNames,
         changedConfigs.keySet()));
+    
configHelper.checkStaleConfigsStatusOnConfigsUpdate(clusterEntity.getClusterId(),
 serviceName, groupHostNames, changedConfigs);
 
     return convertToServiceConfigVersionResponse(serviceConfigEntityClone);
   }
@@ -1961,8 +1963,7 @@ public class ClusterImpl implements Cluster {
   @Transactional
   ServiceConfigVersionResponse applyConfigs(Set<Config> configs, String user, 
String serviceConfigVersionNote) throws AmbariException{
 
-    List<ClusterConfigEntity> appliedConfigs = new ArrayList<>();
-    String serviceName = 
getServiceForConfigTypes(configs.stream().map(Config::getType).collect(toList()));
+List<ClusterConfigEntity> appliedConfigs = new ArrayList<>();    String 
serviceName = getServiceForConfigTypes( 
configs.stream().map(Config::getType).collect(toList()));
     // update the selected flag for every config type
     ClusterEntity clusterEntity = getClusterEntity();
     Collection<ClusterConfigEntity> clusterConfigs = 
clusterEntity.getClusterConfigEntities();
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
index 1c9a41f..55ef12f 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
@@ -38,7 +38,6 @@ import org.apache.ambari.server.ClusterNotFoundException;
 import org.apache.ambari.server.DuplicateResourceException;
 import org.apache.ambari.server.HostNotFoundException;
 import org.apache.ambari.server.agent.DiskInfo;
-import org.apache.ambari.server.agent.stomp.AgentConfigsHolder;
 import org.apache.ambari.server.agent.stomp.MetadataHolder;
 import org.apache.ambari.server.agent.stomp.TopologyHolder;
 import org.apache.ambari.server.agent.stomp.dto.TopologyCluster;
@@ -154,9 +153,6 @@ public class ClustersImpl implements Clusters {
   private Provider<TopologyHolder> m_topologyHolder;
 
   @Inject
-  private Provider<AgentConfigsHolder> m_agentConfigsHolder;
-
-  @Inject
   private Provider<MetadataHolder> m_metadataHolder;
 
   @Inject
@@ -311,14 +307,6 @@ public class ClustersImpl implements Clusters {
         cSet.add(clustersByName.get(clusterEntity.getClusterName()));
       }
     }
-    // init host configs
-    for (Long hostId : hostsById.keySet()) {
-      try {
-        m_agentConfigsHolder.get().initializeDataIfNeeded(hostId, true);
-      } catch (AmbariException e) {
-        LOG.error("Agent configs initialization was failed", e);
-      }
-    }
   }
 
   @Override
@@ -491,12 +479,6 @@ public class ClustersImpl implements Clusters {
 
     if (null != hostId) {
       getHostsById().put(hostId, host);
-      // init host configs
-      try {
-        m_agentConfigsHolder.get().initializeDataIfNeeded(hostId, true);
-      } catch (AmbariException e) {
-        LOG.error("Agent configs initialization was failed for host with id 
%s", hostId, e);
-      }
     }
   }
 
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
index 958a3b5..26dc691 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
@@ -45,6 +45,8 @@ import javax.xml.parsers.DocumentBuilderFactory;
 import org.apache.ambari.annotations.Experimental;
 import org.apache.ambari.annotations.ExperimentalFeature;
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.agent.stomp.AgentConfigsHolder;
+import org.apache.ambari.server.agent.stomp.MetadataHolder;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.configuration.Configuration.DatabaseType;
@@ -636,10 +638,10 @@ public abstract class AbstractUpgradeCatalog implements 
UpgradeCatalog {
                 + "tag='" + baseConfig.getTag() + "'"
                 + oldConfigString);
             }
-
-            ConfigHelper configHelper = 
injector.getInstance(ConfigHelper.class);
-            
configHelper.updateAgentConfigs(Collections.singletonMap(cluster.getClusterName(),
-                Collections.singleton(serviceName)));
+            MetadataHolder metadataHolder = 
injector.getInstance(MetadataHolder.class);
+            AgentConfigsHolder agentConfigsHolder = 
injector.getInstance(AgentConfigsHolder.class);
+            
metadataHolder.updateData(controller.getClusterMetadataOnConfigsUpdate(cluster));
+            agentConfigsHolder.updateData(cluster.getClusterId(), null);
           }
         } else {
           LOG.info("No changes detected to config " + configType + ". Skipping 
configuration properties update");
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
index 56036fe..16670eb 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
@@ -26,7 +26,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.TreeMap;
 
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.H2DatabaseCleaner;
@@ -46,7 +45,6 @@ import 
org.apache.ambari.server.controller.internal.RequestOperationLevel;
 import org.apache.ambari.server.controller.internal.RequestResourceFilter;
 import 
org.apache.ambari.server.controller.internal.ServiceResourceProviderTest;
 import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.events.AgentConfigsUpdateEvent;
 import org.apache.ambari.server.metadata.ActionMetadata;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
@@ -146,9 +144,6 @@ public class AmbariCustomCommandExecutionHelperTest {
         EasyMock.anyObject(Cluster.class),
         EasyMock.anyObject(Map.class))).andReturn(Collections.EMPTY_SET);
 
-    
EasyMock.expect(configHelper.getHostActualConfigs(EasyMock.anyLong())).andReturn(
-        new AgentConfigsUpdateEvent(new TreeMap<>())).anyTimes();
-
     EasyMock.replay(configHelper);
 
     StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class));
@@ -543,15 +538,8 @@ public class AmbariCustomCommandExecutionHelperTest {
   public void testIsTopologyRefreshRequired() throws Exception {
     AmbariCustomCommandExecutionHelper helper = 
injector.getInstance(AmbariCustomCommandExecutionHelper.class);
 
-    
EasyMock.expect(configHelper.getHostActualConfigs(EasyMock.anyLong())).andReturn(
-        new AgentConfigsUpdateEvent(new TreeMap<>())).anyTimes();
-
-    EasyMock.replay(configHelper);
-
     createClusterFixture("c2", new StackId("HDP-2.1.1"), "2.1.1.0-1234", "c2");
 
-    EasyMock.verify(configHelper);
-
     Assert.assertTrue(helper.isTopologyRefreshRequired("START", "c2", "HDFS"));
     Assert.assertTrue(helper.isTopologyRefreshRequired("RESTART", "c2", 
"HDFS"));
     Assert.assertFalse(helper.isTopologyRefreshRequired("STOP", "c2", "HDFS"));
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
index 798ad80..c3fe064 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
@@ -982,11 +982,19 @@ public class AmbariManagementControllerImplTest {
     constructorInit(injector, controllerCapture, null, null,
         kerberosHelper, m_metadataHolder, m_agentConfigsHolder);
 
+    expect(m_metadataHolder.get()).andReturn(metadataHolder);
+    expect(metadataHolder.updateData(anyObject())).andReturn(true);
+
+    expect(m_agentConfigsHolder.get()).andReturn(agentConfigsHolder);
+    agentConfigsHolder.updateData(anyLong(), anyObject(List.class));
+    expectLastCall();
+
     expect(clusterRequest.getClusterId()).andReturn(1L).times(4);
     
expect(clusterRequest.getSecurityType()).andReturn(SecurityType.NONE).anyTimes();
     expect(clusters.getClusterById(1L)).andReturn(cluster).times(1);
     expect(cluster.getResourceId()).andReturn(1L).times(3);
     expect(cluster.getClusterName()).andReturn("cluster").times(1);
+    expect(cluster.getClusterId()).andReturn(1L).times(1);
     
expect(cluster.getSecurityType()).andReturn(SecurityType.KERBEROS).anyTimes();
     expect(cluster.getCurrentStackVersion()).andReturn(null).anyTimes();
     expect(cluster.getDesiredStackVersion()).andReturn(null).anyTimes();
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProviderTest.java
index 449d550..91526c3 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProviderTest.java
@@ -31,7 +31,6 @@ import static org.easymock.EasyMock.newCapture;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 
-import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -79,7 +78,6 @@ import 
org.springframework.security.core.context.SecurityContextHolder;
 import com.google.inject.Binder;
 import com.google.inject.Guice;
 import com.google.inject.Module;
-import com.google.inject.Provider;
 import com.google.inject.util.Modules;
 
 public class ConfigGroupResourceProviderTest {
@@ -99,24 +97,12 @@ public class ConfigGroupResourceProviderTest {
   }
 
   private ConfigGroupResourceProvider getConfigGroupResourceProvider
-      (AmbariManagementController managementController) throws 
NoSuchFieldException, IllegalAccessException {
+      (AmbariManagementController managementController) {
     Resource.Type type = Resource.Type.ConfigGroup;
 
-    ConfigGroupResourceProvider configGroupResourceProvider =
-        (ConfigGroupResourceProvider) 
AbstractControllerResourceProvider.getResourceProvider(
+    return (ConfigGroupResourceProvider) 
AbstractControllerResourceProvider.getResourceProvider(
         type,
         managementController);
-
-    Provider<ConfigHelper> configHelperProvider = 
createNiceMock(Provider.class);
-    
expect(configHelperProvider.get()).andReturn(createNiceMock(ConfigHelper.class));
-
-    replay(configHelperProvider);
-
-    Field m_configHelper = 
ConfigGroupResourceProvider.class.getDeclaredField("m_configHelper");
-    m_configHelper.setAccessible(true);
-    m_configHelper.set(configGroupResourceProvider, configHelperProvider);
-
-    return configGroupResourceProvider;
   }
 
 
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
index ad8b84a..909ba0d 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
@@ -216,6 +216,14 @@ public class ClusterTest {
       hostEntity.setHostAttributes(gson.toJson(hostAttributes));
 
 
+//      hostDAO.merge(hostEntity);
+
+      HostVersionEntity hostVersionEntity = new HostVersionEntity();
+      hostVersionEntity.setRepositoryVersion(repositoryVersion);
+      hostVersionEntity.setState(RepositoryVersionState.CURRENT);
+      hostVersionEntity.setHostEntity(hostEntity);
+      
hostEntity.setHostVersionEntities(Collections.singletonList(hostVersionEntity));
+
       hostDAO.merge(hostEntity);
     }
 
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog252Test.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog252Test.java
index 0afa39c..c2d5a97 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog252Test.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog252Test.java
@@ -23,7 +23,6 @@ import static org.easymock.EasyMock.anyString;
 import static org.easymock.EasyMock.capture;
 import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.createStrictMock;
 import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.expectLastCall;
@@ -63,6 +62,7 @@ import org.apache.ambari.server.controller.KerberosHelper;
 import org.apache.ambari.server.controller.KerberosHelperImpl;
 import org.apache.ambari.server.controller.MaintenanceStateHelper;
 import org.apache.ambari.server.controller.RootServiceResponseFactory;
+import org.apache.ambari.server.events.MetadataUpdateEvent;
 import org.apache.ambari.server.hooks.HookService;
 import org.apache.ambari.server.hooks.users.UserHookService;
 import org.apache.ambari.server.metadata.CachedRoleCommandOrderProvider;
@@ -77,7 +77,6 @@ import org.apache.ambari.server.stack.StackManagerFactory;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
-import org.apache.ambari.server.state.ConfigHelper;
 import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceComponentHostFactory;
 import org.apache.ambari.server.state.StackId;
@@ -252,21 +251,17 @@ public class UpgradeCatalog252Test {
     expect(controller.createConfig(eq(cluster), eq(stackId), eq("livy2-conf"), 
capture(captureLivy2ConfProperties), anyString(), anyObject(Map.class)))
         .andReturn(livy2ConfNew)
         .once();
+    expect(controller.getClusterMetadataOnConfigsUpdate(eq(cluster)))
+        .andReturn(createNiceMock(MetadataUpdateEvent.class))
+        .times(2);
 
     replay(clusters, cluster, zeppelinEnv, livy2Conf, livyConf, controller, 
metadataHolder);
 
     Injector injector = getInjector(clusters, controller);
-
-    final ConfigHelper configHelper = injector.getInstance(ConfigHelper.class);
-    configHelper.updateAgentConfigs(anyObject(Map.class));
-    expectLastCall().times(2);
-
-    replay(configHelper);
-
     UpgradeCatalog252 upgradeCatalog252 = 
injector.getInstance(UpgradeCatalog252.class);
     upgradeCatalog252.fixLivySuperusers();
 
-    verify(clusters, cluster, zeppelinEnv, livy2Conf, livyConf, controller, 
configHelper);
+    verify(clusters, cluster, zeppelinEnv, livy2Conf, livyConf, controller);
 
     Assert.assertTrue(captureLivyConfProperties.hasCaptured());
     Assert.assertEquals("some_user,zeppelin_user", 
captureLivyConfProperties.getValue().get("livy.superusers"));
@@ -464,7 +459,6 @@ public class UpgradeCatalog252Test {
         binder.bind(MetadataHolder.class).toInstance(metadataHolder);
         
binder.bind(AgentConfigsHolder.class).toInstance(createNiceMock(AgentConfigsHolder.class));
         
binder.bind(StackManagerFactory.class).toInstance(createNiceMock(StackManagerFactory.class));
-        
binder.bind(ConfigHelper.class).toInstance(createStrictMock(ConfigHelper.class));
       }
     };
     return Guice.createInjector(module);
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
index 4f71252..1e92ec5 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
@@ -24,7 +24,6 @@ import static org.easymock.EasyMock.capture;
 import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.createMockBuilder;
 import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.createStrictMock;
 import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.expectLastCall;
@@ -75,6 +74,7 @@ import 
org.apache.ambari.server.controller.MaintenanceStateHelper;
 import org.apache.ambari.server.controller.RootServiceResponseFactory;
 import org.apache.ambari.server.controller.ServiceConfigVersionResponse;
 import org.apache.ambari.server.events.AmbariEvent;
+import org.apache.ambari.server.events.MetadataUpdateEvent;
 import org.apache.ambari.server.events.publishers.STOMPUpdatePublisher;
 import org.apache.ambari.server.hooks.AmbariEventFactory;
 import org.apache.ambari.server.hooks.HookContext;
@@ -100,7 +100,6 @@ import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Config;
 import org.apache.ambari.server.state.ConfigFactory;
-import org.apache.ambari.server.state.ConfigHelper;
 import org.apache.ambari.server.state.ConfigImpl;
 import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.state.Service;
@@ -648,7 +647,6 @@ public class UpgradeCatalog260Test {
     Injector injector = getInjector();
 
     final Clusters clusters = injector.getInstance(Clusters.class);
-    final ConfigHelper configHelper = injector.getInstance(ConfigHelper.class);
     final Cluster cluster = createMock(Cluster.class);
     final Config zeppelinEnvConf = createMock(Config.class);
     final Config coreSiteConf = createMock(Config.class);
@@ -657,12 +655,10 @@ public class UpgradeCatalog260Test {
 
     Capture<? extends Map<String, String>> captureCoreSiteConfProperties = 
newCapture();
 
-    configHelper.updateAgentConfigs(anyObject(Map.class));
-    expectLastCall();
-
     expect(clusters.getClusters()).andReturn(Collections.singletonMap("c1", 
cluster)).once();
 
     expect(cluster.getClusterName()).andReturn("c1").atLeastOnce();
+    expect(cluster.getClusterId()).andReturn(1L).atLeastOnce();
     expect(cluster.getDesiredStackVersion()).andReturn(new 
StackId("HDP-2.6")).atLeastOnce();
     
expect(cluster.getDesiredConfigByType("zeppelin-env")).andReturn(zeppelinEnvConf).atLeastOnce();
     
expect(cluster.getDesiredConfigByType("core-site")).andReturn(coreSiteConf).atLeastOnce();
@@ -679,13 +675,16 @@ public class UpgradeCatalog260Test {
     expect(controller.createConfig(eq(cluster), anyObject(StackId.class), 
eq("core-site"), capture(captureCoreSiteConfProperties), anyString(), 
anyObject(Map.class)))
         .andReturn(coreSiteConfNew)
         .once();
+    expect(controller.getClusterMetadataOnConfigsUpdate(eq(cluster)))
+        .andReturn(createNiceMock(MetadataUpdateEvent.class))
+        .once();
 
-    replay(clusters, cluster, zeppelinEnvConf, coreSiteConf, coreSiteConfNew, 
controller, configHelper);
+    replay(clusters, cluster, zeppelinEnvConf, coreSiteConf, coreSiteConfNew, 
controller);
 
     UpgradeCatalog260 upgradeCatalog260 = 
injector.getInstance(UpgradeCatalog260.class);
     upgradeCatalog260.ensureZeppelinProxyUserConfigs();
 
-    verify(clusters, cluster, zeppelinEnvConf, coreSiteConf, coreSiteConfNew, 
controller, configHelper);
+    verify(clusters, cluster, zeppelinEnvConf, coreSiteConf, coreSiteConfNew, 
controller);
 
     assertTrue(captureCoreSiteConfProperties.hasCaptured());
     Assert.assertEquals("existing_value", 
captureCoreSiteConfProperties.getValue().get("hadoop.proxyuser.zeppelin_user.hosts"));
@@ -726,11 +725,6 @@ public class UpgradeCatalog260Test {
     artifactEntity.setArtifactData(capture(captureMap));
     expectLastCall().once();
 
-    ConfigHelper configHelper = injector.getInstance(ConfigHelper.class);
-
-    configHelper.updateAgentConfigs(anyObject(Map.class));
-    expectLastCall().once();
-
     ArtifactDAO artifactDAO = createMock(ArtifactDAO.class);
     
expect(artifactDAO.merge(artifactEntity)).andReturn(artifactEntity).atLeastOnce();
 
@@ -774,6 +768,7 @@ public class UpgradeCatalog260Test {
     
expect(cluster.getConfigsByType("ranger-kms-audit")).andReturn(Collections.singletonMap("version1",
 config)).anyTimes();
     
expect(cluster.getServiceByConfigType("ranger-kms-audit")).andReturn("RANGER").anyTimes();
     expect(cluster.getClusterName()).andReturn("cl1").anyTimes();
+    expect(cluster.getClusterId()).andReturn(1L).atLeastOnce();
     expect(cluster.getConfig(eq("ranger-kms-audit"), 
anyString())).andReturn(newConfig).once();
     expect(cluster.addDesiredConfig("ambari-upgrade", 
Collections.singleton(newConfig), "Updated ranger-kms-audit during Ambari 
Upgrade from 2.5.2 to 2.6.0.")).andReturn(response).once();
 
@@ -800,12 +795,15 @@ public class UpgradeCatalog260Test {
     expect(controller.createConfig(eq(cluster), eq(stackId), 
eq("hive-interactive-site"), capture(captureHsiProperties), anyString(), 
anyObject(Map.class)))
             .andReturn(null)
             .anyTimes();
+    expect(controller.getClusterMetadataOnConfigsUpdate(eq(cluster)))
+        .andReturn(createNiceMock(MetadataUpdateEvent.class))
+        .once();
 
-    replay(artifactDAO, artifactEntity, cluster, clusters, config, newConfig, 
hsiConfig, newHsiConfig, response, response1, controller, stackId, 
configHelper);
+    replay(artifactDAO, artifactEntity, cluster, clusters, config, newConfig, 
hsiConfig, newHsiConfig, response, response1, controller, stackId);
 
     UpgradeCatalog260 upgradeCatalog260 = 
injector.getInstance(UpgradeCatalog260.class);
     upgradeCatalog260.updateKerberosDescriptorArtifact(artifactDAO, 
artifactEntity);
-    verify(artifactDAO, artifactEntity, cluster, clusters, config, newConfig, 
response, controller, stackId, configHelper);
+    verify(artifactDAO, artifactEntity, cluster, clusters, config, newConfig, 
response, controller, stackId);
     KerberosDescriptor kerberosDescriptorUpdated = new 
KerberosDescriptorFactory().createInstance(captureMap.getValue());
     Assert.assertNotNull(kerberosDescriptorUpdated);
 
@@ -1109,7 +1107,6 @@ public class UpgradeCatalog260Test {
         
binder.bind(KerberosHelper.class).toInstance(createNiceMock(KerberosHelperImpl.class));
         
binder.bind(MetadataHolder.class).toInstance(createNiceMock(MetadataHolder.class));
         
binder.bind(AgentConfigsHolder.class).toInstance(createNiceMock(AgentConfigsHolder.class));
-        
binder.bind(ConfigHelper.class).toInstance(createStrictMock(ConfigHelper.class));
 
         binder.install(new FactoryModuleBuilder().build(RequestFactory.class));
         binder.install(new 
FactoryModuleBuilder().build(ConfigureClusterTaskFactory.class));
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog270Test.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog270Test.java
index 2215ec2..b092eb4 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog270Test.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog270Test.java
@@ -118,7 +118,6 @@ import static org.easymock.EasyMock.capture;
 import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.createMockBuilder;
 import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.createStrictMock;
 import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.expectLastCall;
@@ -178,6 +177,7 @@ import 
org.apache.ambari.server.controller.KerberosHelperImpl;
 import org.apache.ambari.server.controller.MaintenanceStateHelper;
 import org.apache.ambari.server.controller.RootServiceResponseFactory;
 import org.apache.ambari.server.controller.ServiceConfigVersionResponse;
+import org.apache.ambari.server.events.MetadataUpdateEvent;
 import org.apache.ambari.server.hooks.HookService;
 import org.apache.ambari.server.hooks.users.UserHookService;
 import org.apache.ambari.server.metadata.CachedRoleCommandOrderProvider;
@@ -1105,6 +1105,7 @@ public class UpgradeCatalog270Test {
     
expect(cluster1.getConfigsByType("kerberos-env")).andReturn(Collections.singletonMap("v1",
 configWithGroup)).atLeastOnce();
     
expect(cluster1.getServiceByConfigType("kerberos-env")).andReturn("KERBEROS").atLeastOnce();
     expect(cluster1.getClusterName()).andReturn("c1").atLeastOnce();
+    expect(cluster1.getClusterId()).andReturn(1L).atLeastOnce();
     expect(cluster1.getDesiredStackVersion()).andReturn(stackId).atLeastOnce();
     expect(cluster1.getConfig(eq("kerberos-env"), 
anyString())).andReturn(newConfig).atLeastOnce();
     expect(cluster1.addDesiredConfig("ambari-upgrade", 
Collections.singleton(newConfig), "Updated kerberos-env during Ambari Upgrade 
from 2.6.2 to 2.7.0.")).andReturn(response).once();
@@ -1139,23 +1140,19 @@ public class UpgradeCatalog270Test {
         .createMock();
     expect(controller.getClusters()).andReturn(clusters).anyTimes();
     expect(controller.createConfig(eq(cluster1), eq(stackId), 
eq("kerberos-env"), capture(capturedProperties), anyString(), 
anyObject(Map.class))).andReturn(newConfig).once();
+    
expect(controller.getClusterMetadataOnConfigsUpdate(eq(cluster1))).andReturn(createNiceMock(MetadataUpdateEvent.class)).once();
 
 
     Injector injector = createNiceMock(Injector.class);
-    ConfigHelper configHelper = createStrictMock(ConfigHelper.class);
     
expect(injector.getInstance(AmbariManagementController.class)).andReturn(controller).anyTimes();
     
expect(injector.getInstance(MetadataHolder.class)).andReturn(createNiceMock(MetadataHolder.class)).anyTimes();
     
expect(injector.getInstance(AgentConfigsHolder.class)).andReturn(createNiceMock(AgentConfigsHolder.class)).anyTimes();
     
expect(injector.getInstance(AmbariServer.class)).andReturn(createNiceMock(AmbariServer.class)).anyTimes();
-    
expect(injector.getInstance(ConfigHelper.class)).andReturn(configHelper).anyTimes();
     KerberosHelper kerberosHelperMock = createNiceMock(KerberosHelper.class);
     expect(kerberosHelperMock.createTemporaryDirectory()).andReturn(new 
File("/invalid/file/path")).times(2);
     
expect(injector.getInstance(KerberosHelper.class)).andReturn(kerberosHelperMock).anyTimes();
 
-    configHelper.updateAgentConfigs(anyObject(Map.class));
-    expectLastCall();
-
-    replay(controller, clusters, cluster1, cluster2, configWithGroup, 
configWithoutGroup, newConfig, response, injector, kerberosHelperMock, 
configHelper);
+    replay(controller, clusters, cluster1, cluster2, configWithGroup, 
configWithoutGroup, newConfig, response, injector, kerberosHelperMock);
 
     Field field = 
AbstractUpgradeCatalog.class.getDeclaredField("configuration");
 
@@ -1171,7 +1168,7 @@ public class UpgradeCatalog270Test {
     field.set(upgradeCatalog270, createNiceMock(Configuration.class));
     upgradeCatalog270.updateKerberosConfigurations();
 
-    verify(controller, clusters, cluster1, cluster2, configWithGroup, 
configWithoutGroup, newConfig, response, injector, upgradeCatalog270, 
configHelper);
+    verify(controller, clusters, cluster1, cluster2, configWithGroup, 
configWithoutGroup, newConfig, response, injector, upgradeCatalog270);
 
 
     Assert.assertEquals(1, capturedProperties.getValues().size());

-- 
To stop receiving notification emails like this one, please contact
avija...@apache.org.

Reply via email to