You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rl...@apache.org on 2017/06/30 09:46:29 UTC
[13/33] ambari git commit: AMBARI-21317. Config update API should not
need to have a unique tag,
BE can auto add the tag when it is missing.(vbrodetskyi)
AMBARI-21317. Config update API should not need to have a unique tag, BE can auto add the tag when it is missing.(vbrodetskyi)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/40e6352b
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/40e6352b
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/40e6352b
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 40e6352b0e704ca1af7b0e88a267b03bde5cea59
Parents: 8634718
Author: Vitaly Brodetskyi <vb...@hortonworks.com>
Authored: Tue Jun 27 22:44:28 2017 +0300
Committer: Vitaly Brodetskyi <vb...@hortonworks.com>
Committed: Tue Jun 27 22:44:28 2017 +0300
----------------------------------------------------------------------
.../controller/AmbariManagementController.java | 4 +++
.../AmbariManagementControllerImpl.java | 29 +++++++++++++++---
.../server/controller/ConfigGroupResponse.java | 10 +++++++
.../internal/ConfigGroupResourceProvider.java | 31 ++++++++++++++++++--
.../apache/ambari/server/state/ConfigImpl.java | 3 +-
.../AmbariManagementControllerImplTest.java | 16 ++++++++--
.../ConfigGroupResourceProviderTest.java | 2 ++
7 files changed, 85 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/40e6352b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
index bb1c95e..f0f13e1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
@@ -911,5 +911,9 @@ public interface AmbariManagementController {
*/
QuickLinkVisibilityController getQuicklinkVisibilityController();
+ ConfigGroupResponse getConfigGroupUpdateResults(ConfigGroupRequest configGroupRequest);
+
+ void saveConfigGroupUpdate(ConfigGroupRequest configGroupRequest, ConfigGroupResponse configGroupResponse);
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/40e6352b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
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 6781f65..77883e3 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
@@ -65,6 +65,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
+import java.util.UUID;
import java.util.concurrent.TimeUnit;
import javax.persistence.RollbackException;
@@ -346,6 +347,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
private Cache<ClusterRequest, ClusterResponse> clusterUpdateCache =
CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build();
+ private Cache<ConfigGroupRequest, ConfigGroupResponse> configGroupUpdateCache =
+ CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build();
@Inject
private AmbariCustomCommandExecutionHelper customCommandExecutionHelper;
@@ -1632,6 +1635,15 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
cluster = clusters.getClusterById(request.getClusterId());
}
+ List<ConfigurationRequest> desiredConfigs = request.getDesiredConfig();
+ if (desiredConfigs != null) {
+ for (ConfigurationRequest configurationRequest : desiredConfigs) {
+ if (StringUtils.isEmpty(configurationRequest.getVersionTag())) {
+ configurationRequest.setVersionTag(UUID.randomUUID().toString());
+ }
+ }
+ }
+
// Ensure the user has access to update this cluster
AuthorizationHelper.verifyAuthorization(ResourceType.CLUSTER, cluster.getResourceId(), RoleAuthorization.AUTHORIZATIONS_UPDATE_CLUSTER);
@@ -1640,7 +1652,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
new LinkedList<>();
ServiceConfigVersionResponse serviceConfigVersionResponse = null;
- if (request.getDesiredConfig() != null && request.getServiceConfigVersionRequest() != null) {
+ if (desiredConfigs != null && request.getServiceConfigVersionRequest() != null) {
String msg = "Unable to set desired configs and rollback at same time, request = " + request;
LOG.error(msg);
throw new IllegalArgumentException(msg);
@@ -1661,8 +1673,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
//check if desired configs are available in request and they were changed
boolean isConfigurationCreationNeeded = false;
- if (request.getDesiredConfig() != null) {
- for (ConfigurationRequest desiredConfig : request.getDesiredConfig()) {
+ if (desiredConfigs != null) {
+ for (ConfigurationRequest desiredConfig : desiredConfigs) {
Map<String, String> requestConfigProperties = desiredConfig.getProperties();
Map<String,Map<String,String>> requestConfigAttributes = desiredConfig.getPropertiesAttributes();
@@ -1739,7 +1751,6 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
// set or create configuration mapping (and optionally create the map of properties)
if (isConfigurationCreationNeeded) {
- List<ConfigurationRequest> desiredConfigs = request.getDesiredConfig();
if (!desiredConfigs.isEmpty()) {
Set<Config> configs = new HashSet<>();
@@ -2073,6 +2084,16 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
@Override
+ public ConfigGroupResponse getConfigGroupUpdateResults(ConfigGroupRequest configGroupRequest) {
+ return configGroupUpdateCache.getIfPresent(configGroupRequest);
+ }
+
+ @Override
+ public void saveConfigGroupUpdate(ConfigGroupRequest configGroupRequest, ConfigGroupResponse configGroupResponse) {
+ configGroupUpdateCache.put(configGroupRequest, configGroupResponse);
+ }
+
+ @Override
public String getJobTrackerHost(Cluster cluster) {
try {
Service svc = cluster.getService("MAPREDUCE");
http://git-wip-us.apache.org/repos/asf/ambari/blob/40e6352b/ambari-server/src/main/java/org/apache/ambari/server/controller/ConfigGroupResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ConfigGroupResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ConfigGroupResponse.java
index 58c680d..937df46 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ConfigGroupResponse.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ConfigGroupResponse.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.controller;
+import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@@ -28,6 +29,7 @@ public class ConfigGroupResponse {
private String description;
private Set<Map<String, Object>> hosts;
private Set<Map<String, Object>> configVersions;
+ private Set<Map<String, Object>> versionTags = new HashSet<Map<String, Object>>();
public ConfigGroupResponse(Long id, String clusterName,
String groupName, String tag, String description,
@@ -97,4 +99,12 @@ public class ConfigGroupResponse {
public void setConfigurations(Set<Map<String, Object>> configurations) {
this.configVersions = configurations;
}
+
+ public Set<Map<String, Object>> getVersionTags() {
+ return versionTags;
+ }
+
+ public void setVersionTags(Set<Map<String, Object>> versionTags) {
+ this.versionTags = versionTags;
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/40e6352b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProvider.java
----------------------------------------------------------------------
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 c2b998c..25af9d2 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
@@ -96,6 +96,8 @@ public class ConfigGroupResourceProvider extends
.getPropertyId("ConfigGroup", "hosts");
public static final String CONFIGGROUP_CONFIGS_PROPERTY_ID =
PropertyHelper.getPropertyId("ConfigGroup", "desired_configs");
+ public static final String CONFIGGROUP_VERSION_TAGS_PROPERTY_ID =
+ PropertyHelper.getPropertyId("ConfigGroup", "version_tags");
private static Set<String> pkPropertyIds = new HashSet<>(Arrays
.asList(new String[]{CONFIGGROUP_ID_PROPERTY_ID}));
@@ -217,9 +219,23 @@ public class ConfigGroupResourceProvider extends
RequestStatus status = updateResources(requests);
+ Set<Resource> associatedResources = new HashSet<>();
+ for (ConfigGroupRequest configGroupRequest : requests) {
+ ConfigGroupResponse configGroupResponse = getManagementController().getConfigGroupUpdateResults(configGroupRequest);
+ Resource resource = new ResourceImpl(Resource.Type.ConfigGroup);
+
+ resource.setProperty(CONFIGGROUP_ID_PROPERTY_ID, configGroupResponse.getId());
+ resource.setProperty(CONFIGGROUP_CLUSTER_NAME_PROPERTY_ID, configGroupResponse.getClusterName());
+ resource.setProperty(CONFIGGROUP_NAME_PROPERTY_ID, configGroupResponse.getGroupName());
+ resource.setProperty(CONFIGGROUP_TAG_PROPERTY_ID, configGroupResponse.getTag());
+ resource.setProperty(CONFIGGROUP_VERSION_TAGS_PROPERTY_ID, configGroupResponse.getVersionTags());
+
+ associatedResources.add(resource);
+ }
+
notifyUpdate(Resource.Type.ConfigGroup, request, predicate);
- return status;
+ return getRequestStatus(null, associatedResources);
}
@Override
@@ -701,7 +717,18 @@ public class ConfigGroupResourceProvider extends
if (serviceName != null) {
cluster.createServiceConfigVersion(serviceName, getManagementController().getAuthName(),
- request.getServiceConfigVersionNote(), configGroup);
+ request.getServiceConfigVersionNote(), configGroup);
+
+ ConfigGroupResponse configGroupResponse = new ConfigGroupResponse(configGroup.getId(), cluster.getClusterName(), configGroup.getName(),
+ request.getTag(), "", new HashSet<Map<String, Object>>(), new HashSet<Map<String, Object>>());
+ Set<Map<String, Object>> versionTags = new HashSet<Map<String, Object>>();
+ Map<String, Object> tagsMap = new HashMap<String, Object>();
+ for (Config config : configGroup.getConfigurations().values()) {
+ tagsMap.put(config.getType(), config.getTag());
+ }
+ versionTags.add(tagsMap);
+ configGroupResponse.setVersionTags(versionTags);
+ getManagementController().saveConfigGroupUpdate(request, configGroupResponse);
} else {
LOG.warn("Could not determine service name for config group {}, service config version not created",
configGroup.getId());
http://git-wip-us.apache.org/repos/asf/ambari/blob/40e6352b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
index 65b7863..cfcadd4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ConfigImpl.java
@@ -22,6 +22,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.UUID;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.locks.ReadWriteLock;
@@ -133,7 +134,7 @@ public class ConfigImpl implements Config {
version = cluster.getNextConfigVersion(type);
// tag is nullable from factory but not in the DB, so ensure we generate something
- tag = StringUtils.isBlank(tag) ? GENERATED_TAG_PREFIX + version : tag;
+ tag = StringUtils.isBlank(tag) ? UUID.randomUUID().toString() : tag;
this.tag = tag;
ClusterEntity clusterEntity = clusterDAO.findById(cluster.getClusterId());
http://git-wip-us.apache.org/repos/asf/ambari/blob/40e6352b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
----------------------------------------------------------------------
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 c0e3ef1..eadc678 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
@@ -561,9 +561,14 @@ public class AmbariManagementControllerImplTest {
Cluster cluster = createNiceMock(Cluster.class);
ActionManager actionManager = createNiceMock(ActionManager.class);
ClusterRequest clusterRequest = createNiceMock(ClusterRequest.class);
+ ConfigurationRequest configurationRequest = createNiceMock(ConfigurationRequest.class);
// requests
- Set<ClusterRequest> setRequests = Collections.singleton(clusterRequest);
+ Set<ClusterRequest> setRequests = new HashSet<ClusterRequest>();
+ setRequests.add(clusterRequest);
+
+ List<ConfigurationRequest> configRequests = new ArrayList<>();
+ configRequests.add(configurationRequest);
KerberosHelper kerberosHelper = createStrictMock(KerberosHelper.class);
// expectations
@@ -573,6 +578,8 @@ public class AmbariManagementControllerImplTest {
expect(injector.getInstance(KerberosHelper.class)).andReturn(kerberosHelper);
expect(clusterRequest.getClusterName()).andReturn("clusterNew").times(3);
expect(clusterRequest.getClusterId()).andReturn(1L).times(6);
+ expect(clusterRequest.getDesiredConfig()).andReturn(configRequests);
+ expect(configurationRequest.getVersionTag()).andReturn(null).times(1);
expect(clusters.getClusterById(1L)).andReturn(cluster).times(2);
expect(cluster.getClusterName()).andReturn("clusterOld").times(1);
@@ -582,8 +589,11 @@ public class AmbariManagementControllerImplTest {
cluster.setClusterName("clusterNew");
expectLastCall();
+ configurationRequest.setVersionTag(EasyMock.anyObject(String.class));
+ expectLastCall();
+
// replay mocks
- replay(actionManager, cluster, clusters, injector, clusterRequest, sessionManager);
+ replay(actionManager, cluster, clusters, injector, clusterRequest, sessionManager, configurationRequest);
// test
AmbariManagementController controller = new AmbariManagementControllerImpl(actionManager, clusters, injector);
@@ -591,7 +601,7 @@ public class AmbariManagementControllerImplTest {
// assert and verify
assertSame(controller, controllerCapture.getValue());
- verify(actionManager, cluster, clusters, injector, clusterRequest, sessionManager);
+ verify(actionManager, cluster, clusters, injector, clusterRequest, sessionManager, configurationRequest);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/40e6352b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ConfigGroupResourceProviderTest.java
----------------------------------------------------------------------
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 12cbadf..6dd0748 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
@@ -495,6 +495,8 @@ public class ConfigGroupResourceProviderTest {
expect(hostEntity2.getHostId()).andReturn(2L).atLeastOnce();
expect(h1.getHostId()).andReturn(1L).anyTimes();
expect(h2.getHostId()).andReturn(2L).anyTimes();
+ expect(managementController.getConfigGroupUpdateResults((ConfigGroupRequest)anyObject())).
+ andReturn(new ConfigGroupResponse(1L, "", "", "", "", new HashSet<Map<String, Object>>(), new HashSet<Map<String, Object>>())).atLeastOnce();
expect(configGroup.getName()).andReturn("test-1").anyTimes();
expect(configGroup.getId()).andReturn(25L).anyTimes();