AMBARI-21173. Not able to start Yarn services after restoring the configs to 
initial value.(vbrodetskyi)


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

Branch: refs/heads/branch-feature-logsearch-ui
Commit: 5895040c8a3374012c11f0e351c8ba631a689ae7
Parents: d690844
Author: Vitaly Brodetskyi <vbrodets...@hortonworks.com>
Authored: Mon Aug 21 23:57:12 2017 +0300
Committer: Vitaly Brodetskyi <vbrodets...@hortonworks.com>
Committed: Mon Aug 21 23:57:12 2017 +0300

----------------------------------------------------------------------
 .../ambari/server/state/cluster/ClusterImpl.java | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5895040c/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
----------------------------------------------------------------------
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 84b411c..26be06e 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
@@ -1797,22 +1797,29 @@ public class ClusterImpl implements Cluster {
 
     // disable all configs related to service
     if (serviceConfigEntity.getGroupId() == null) {
+      // Here was fixed bug with entity changes revert. More you can find here 
AMBARI-21173.
+      // This issue reproduces only if you are changing same entity in first 
and second loop.
+      // In that case eclipselink will revert changes to cached, if entity has 
fluchGroup and it
+      // needs to be refreshed. Actually we don't need to change same antities 
in few steps, so i
+      // decided to filter out. duplicates and do not change them. It will be 
better for performance and bug will be fixed.
       Collection<String> configTypes = serviceConfigTypes.get(serviceName);
       List<ClusterConfigEntity> enabledConfigs = 
clusterDAO.getEnabledConfigsByTypes(clusterId, configTypes);
       List<ClusterConfigEntity> serviceConfigEntities = 
serviceConfigEntity.getClusterConfigEntities();
       ArrayList<ClusterConfigEntity> duplicatevalues = new 
ArrayList<>(serviceConfigEntities);
       duplicatevalues.retainAll(enabledConfigs);
-      enabledConfigs.removeAll(duplicatevalues);
-      serviceConfigEntities.removeAll(duplicatevalues);
 
       for (ClusterConfigEntity enabledConfig : enabledConfigs) {
-        enabledConfig.setSelected(false);
-        clusterDAO.merge(enabledConfig);
+        if (!duplicatevalues.contains(enabledConfig)) {
+          enabledConfig.setSelected(false);
+          clusterDAO.merge(enabledConfig);
+        }
       }
 
       for (ClusterConfigEntity configEntity : serviceConfigEntities) {
-        configEntity.setSelected(true);
-        clusterDAO.merge(configEntity);
+        if (!duplicatevalues.contains(configEntity)) {
+          configEntity.setSelected(true);
+          clusterDAO.merge(configEntity);
+        }
       }
     } else {
       Long configGroupId = serviceConfigEntity.getGroupId();

Reply via email to