You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by mr...@apache.org on 2017/11/27 23:29:27 UTC
[15/30] ambari git commit: Merge trunk with feature branch and fix
some UT compilation issues (mradhakrishnan)
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/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 875d9b6..6cc4c04 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
@@ -68,6 +68,8 @@ import java.util.concurrent.TimeUnit;
import javax.persistence.RollbackException;
+import org.apache.ambari.annotations.Experimental;
+import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ClusterNotFoundException;
import org.apache.ambari.server.DuplicateResourceException;
@@ -107,6 +109,7 @@ import org.apache.ambari.server.controller.metrics.MetricsCollectorHAManager;
import org.apache.ambari.server.controller.metrics.timeline.cache.TimelineMetricCacheProvider;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
+import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.customactions.ActionDefinition;
import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
import org.apache.ambari.server.metadata.ActionMetadata;
@@ -198,9 +201,11 @@ import org.apache.ambari.server.state.quicklinksprofile.QuickLinksProfile;
import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.scheduler.RequestExecutionFactory;
import org.apache.ambari.server.state.stack.OsFamily;
+import org.apache.ambari.server.state.stack.RepoTag;
import org.apache.ambari.server.state.stack.RepositoryXml;
import org.apache.ambari.server.state.stack.WidgetLayout;
import org.apache.ambari.server.state.stack.WidgetLayoutInfo;
+import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostInstallEvent;
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostOpInProgressEvent;
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostOpSucceededEvent;
@@ -336,6 +341,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
@Inject
protected OsFamily osFamily;
+ @Inject
+ private RepositoryVersionHelper repoVersionHelper;
+
/**
* The KerberosHelper to help setup for enabling for disabling Kerberos
*/
@@ -2612,7 +2620,12 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
StageUtils.useAmbariJdkInCommandParams(commandParams, configs);
- String repoInfo = customCommandExecutionHelper.getRepoInfo(cluster, component, host);
+ String repoInfo;
+ try {
+ repoInfo = repoVersionHelper.getRepoInfo(cluster, component, host);
+ } catch (SystemException e) {
+ throw new AmbariException("", e);
+ }
if (LOG.isDebugEnabled()) {
LOG.debug("Sending repo information to agent, hostname={}, clusterName={}, stackInfo={}, repoInfo={}",
scHost.getHostName(), clusterName, stackId.getStackId(), repoInfo);
@@ -2710,7 +2723,6 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
execCmd.setRoleParams(roleParams);
execCmd.setCommandParams(commandParams);
- execCmd.setRepositoryFile(customCommandExecutionHelper.getCommandRepository(cluster, component, host));
execCmdWrapper.setVersions(cluster);
if (execCmd.getConfigurationTags().containsKey("cluster-env")) {
@@ -2989,7 +3001,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
if (StringUtils.isBlank(stage.getHostParamsStage())) {
RepositoryVersionEntity repositoryVersion = serviceComponent.getDesiredRepositoryVersion();
stage.setHostParamsStage(StageUtils.getGson().toJson(
- customCommandExecutionHelper.createDefaultHostParams(cluster, repositoryVersion)));
+ customCommandExecutionHelper.createDefaultHostParams(cluster, repositoryVersion.getStackId())));
}
@@ -3337,7 +3349,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
Map<String, String> hostParamsCmd = customCommandExecutionHelper.createDefaultHostParams(
- cluster, scHost.getServiceComponent().getDesiredRepositoryVersion());
+ cluster, scHost.getServiceComponent().getDesiredStackId());
Stage stage = createNewStage(0, cluster, 1, "", clusterHostInfoJson, "{}", "");
@@ -4321,56 +4333,10 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
actionManager,
actionRequest);
- RepositoryVersionEntity desiredRepositoryVersion = null;
-
- RequestOperationLevel operationLevel = actionExecContext.getOperationLevel();
- if (null != operationLevel && StringUtils.isNotBlank(operationLevel.getServiceName())) {
- Service service = cluster.getService(operationLevel.getServiceName());
- if (null != service) {
- desiredRepositoryVersion = service.getDesiredRepositoryVersion();
- }
- }
-
- if (null == desiredRepositoryVersion && CollectionUtils.isNotEmpty(actionExecContext.getResourceFilters())) {
- Set<RepositoryVersionEntity> versions = new HashSet<>();
-
- for (RequestResourceFilter filter : actionExecContext.getResourceFilters()) {
- RepositoryVersionEntity repoVersion = null;
-
- if (StringUtils.isNotBlank(filter.getServiceName())) {
- Service service = cluster.getService(filter.getServiceName());
-
- if (StringUtils.isNotBlank(filter.getComponentName())) {
- ServiceComponent serviceComponent = service.getServiceComponent(filter.getComponentName());
-
- repoVersion = serviceComponent.getDesiredRepositoryVersion();
- }
-
- if (null == repoVersion) {
- repoVersion = service.getDesiredRepositoryVersion();
- }
- }
-
- if (null != repoVersion) {
- versions.add(repoVersion);
- }
- }
-
- if (1 == versions.size()) {
- desiredRepositoryVersion = versions.iterator().next();
- } else if (versions.size() > 1) {
- Set<String> errors = new HashSet<>();
- for (RepositoryVersionEntity version : versions) {
- errors.add(String.format("%s/%s", version.getStackId(), version.getVersion()));
- }
- throw new IllegalArgumentException(String.format("More than one repository is resolved with this Action: %s",
- StringUtils.join(errors, ';')));
- }
- }
-
-
- ExecuteCommandJson jsons = customCommandExecutionHelper.getCommandJson(actionExecContext,
- cluster, desiredRepositoryVersion, requestContext);
+ @Experimental(feature=ExperimentalFeature.MULTI_SERVICE,
+ comment = "This must change with Multi-Service since the cluster won't have a desired stack version")
+ ExecuteCommandJson jsons = customCommandExecutionHelper.getCommandJson(actionExecContext, cluster,
+ null == cluster ? null : cluster.getDesiredStackVersion(), requestContext);
String commandParamsForStage = jsons.getCommandParamsForStage();
@@ -4649,8 +4615,10 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
for (OperatingSystemEntity operatingSystem: repositoryVersion.getOperatingSystems()) {
if (operatingSystem.getOsType().equals(osType)) {
for (RepositoryEntity repository: operatingSystem.getRepositories()) {
+
final RepositoryResponse response = new RepositoryResponse(repository.getBaseUrl(), osType, repository.getRepositoryId(),
- repository.getName(), repository.getDistribution(), repository.getComponents(), "", "");
+ repository.getName(), repository.getDistribution(), repository.getComponents(), "", "",
+ repository.getTags());
if (null != versionDefinitionId) {
response.setVersionDefinitionId(versionDefinitionId);
} else {
@@ -4658,6 +4626,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
}
response.setStackName(repositoryVersion.getStackName());
response.setStackVersion(repositoryVersion.getStackVersion());
+
responses.add(response);
}
break;
@@ -4679,7 +4648,7 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
for (RepositoryXml.Repo repo : os.getRepos()) {
RepositoryResponse resp = new RepositoryResponse(repo.getBaseUrl(), os.getFamily(),
repo.getRepoId(), repo.getRepoName(), repo.getDistribution(), repo.getComponents(), repo.getMirrorsList(),
- repo.getBaseUrl());
+ repo.getBaseUrl(), Collections.<RepoTag>emptySet());
resp.setVersionDefinitionId(versionDefinitionId);
resp.setStackName(stackId.getStackName());
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
index eff1e77..f2ff181 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ControllerModule.java
@@ -63,7 +63,6 @@ import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.configuration.Configuration.ConnectionPoolType;
import org.apache.ambari.server.configuration.Configuration.DatabaseType;
import org.apache.ambari.server.controller.internal.AlertTargetResourceProvider;
-import org.apache.ambari.server.controller.internal.AmbariConfigurationResourceProvider;
import org.apache.ambari.server.controller.internal.ClusterSettingResourceProvider;
import org.apache.ambari.server.controller.internal.ClusterStackVersionResourceProvider;
import org.apache.ambari.server.controller.internal.ComponentResourceProvider;
@@ -74,6 +73,7 @@ import org.apache.ambari.server.controller.internal.HostResourceProvider;
import org.apache.ambari.server.controller.internal.KerberosDescriptorResourceProvider;
import org.apache.ambari.server.controller.internal.MemberResourceProvider;
import org.apache.ambari.server.controller.internal.RepositoryVersionResourceProvider;
+import org.apache.ambari.server.controller.internal.RootServiceComponentConfigurationResourceProvider;
import org.apache.ambari.server.controller.internal.ServiceDependencyResourceProvider;
import org.apache.ambari.server.controller.internal.ServiceGroupDependencyResourceProvider;
import org.apache.ambari.server.controller.internal.ServiceGroupResourceProvider;
@@ -495,10 +495,10 @@ public class ControllerModule extends AbstractModule {
.implement(ResourceProvider.class, Names.named("credential"), CredentialResourceProvider.class)
.implement(ResourceProvider.class, Names.named("kerberosDescriptor"), KerberosDescriptorResourceProvider.class)
.implement(ResourceProvider.class, Names.named("upgrade"), UpgradeResourceProvider.class)
- .implement(ResourceProvider.class, Names.named("ambariConfiguration"), AmbariConfigurationResourceProvider.class)
.implement(ResourceProvider.class, Names.named("clusterStackVersion"), ClusterStackVersionResourceProvider.class)
.implement(ResourceProvider.class, Names.named("alertTarget"), AlertTargetResourceProvider.class)
.implement(ResourceProvider.class, Names.named("viewInstance"), ViewInstanceResourceProvider.class)
+ .implement(ResourceProvider.class, Names.named("rootServiceHostComponentConfiguration"), RootServiceComponentConfigurationResourceProvider.class)
.build(ResourceProviderFactory.class));
install(new FactoryModuleBuilder().implement(
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/DeleteIdentityHandler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/DeleteIdentityHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/DeleteIdentityHandler.java
index f5d51c3..cc84ce2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/DeleteIdentityHandler.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/DeleteIdentityHandler.java
@@ -228,8 +228,7 @@ class DeleteIdentityHandler {
calculateConfig(kerberosDescriptor, serviceNames()),
new HashMap<>(),
false,
- new HashMap<>(),
- false);
+ new HashMap<>());
return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", actionLog.getStdOut(), actionLog.getStdErr());
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelper.java
index b8e1be1..749943d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelper.java
@@ -33,6 +33,7 @@ import org.apache.ambari.server.serveraction.kerberos.KerberosIdentityDataFileWr
import org.apache.ambari.server.serveraction.kerberos.KerberosInvalidConfigurationException;
import org.apache.ambari.server.serveraction.kerberos.KerberosMissingAdminCredentialsException;
import org.apache.ambari.server.serveraction.kerberos.KerberosOperationException;
+import org.apache.ambari.server.serveraction.kerberos.stageutils.ResolvedKerberosKeytab;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.SecurityType;
import org.apache.ambari.server.state.ServiceComponentHost;
@@ -588,15 +589,15 @@ public interface KerberosHelper {
* values
* @param configurations a Map of configurations to use a replacements for variables
* in identity fields
- * @param ignoreHeadless boolean value to specify if headless principals must not be processed
* @return an integer indicating the number of identities added to the data file
* @throws java.io.IOException if an error occurs while writing a record to the data file
*/
int addIdentities(KerberosIdentityDataFileWriter kerberosIdentityDataFileWriter,
Collection<KerberosIdentityDescriptor> identities,
- Collection<String> identityFilter, String hostname, String serviceName,
+ Collection<String> identityFilter, String hostname, Long hostId, String serviceName,
String componentName, Map<String, Map<String, String>> kerberosConfigurations,
- Map<String, Map<String, String>> configurations, boolean ignoreHeadless)
+ Map<String, Map<String, String>> configurations,
+ Map<String, ResolvedKerberosKeytab> resolvedKeytabs, String realm)
throws IOException;
/**
* Calculates the map of configurations relative to the cluster and host.
@@ -735,6 +736,20 @@ public interface KerberosHelper {
PrincipalKeyCredential getKDCAdministratorCredentials(String clusterName) throws AmbariException;
/**
+ * Saves underlying entities in persistent storage.
+ *
+ * @param resolvedKerberosKeytab kerberos keytab to be persisted
+ */
+ void processResolvedKeytab(ResolvedKerberosKeytab resolvedKerberosKeytab);
+
+ /**
+ * Removes existent persisted keytabs if they are not in {@code expectedKeytabs} collection.
+ *
+ * @param expectedKeytabs collection to compare existent keytabs
+ */
+ void removeStaleKeytabs(Collection<ResolvedKerberosKeytab> expectedKeytabs);
+
+ /**
* Translates a collection of configuration specifications (<code>config-type/property-name</code>)
* to a map of configuration types to a set of property names.
* <p>
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
index 4f14614..ab85aa1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java
@@ -60,8 +60,11 @@ import org.apache.ambari.server.controller.internal.RequestStageContainer;
import org.apache.ambari.server.controller.utilities.KerberosChecker;
import org.apache.ambari.server.metadata.RoleCommandOrder;
import org.apache.ambari.server.orm.dao.ArtifactDAO;
+import org.apache.ambari.server.orm.dao.KerberosKeytabDAO;
import org.apache.ambari.server.orm.dao.KerberosPrincipalDAO;
+import org.apache.ambari.server.orm.dao.KerberosPrincipalHostDAO;
import org.apache.ambari.server.orm.entities.ArtifactEntity;
+import org.apache.ambari.server.orm.entities.KerberosKeytabEntity;
import org.apache.ambari.server.security.credential.Credential;
import org.apache.ambari.server.security.credential.PrincipalKeyCredential;
import org.apache.ambari.server.security.encryption.CredentialStoreService;
@@ -91,6 +94,7 @@ import org.apache.ambari.server.serveraction.kerberos.PrepareDisableKerberosServ
import org.apache.ambari.server.serveraction.kerberos.PrepareEnableKerberosServerAction;
import org.apache.ambari.server.serveraction.kerberos.PrepareKerberosIdentitiesServerAction;
import org.apache.ambari.server.serveraction.kerberos.UpdateKerberosConfigsServerAction;
+import org.apache.ambari.server.serveraction.kerberos.stageutils.ResolvedKerberosKeytab;
import org.apache.ambari.server.stageplanner.RoleGraph;
import org.apache.ambari.server.stageplanner.RoleGraphFactory;
import org.apache.ambari.server.state.Cluster;
@@ -125,12 +129,14 @@ import org.apache.ambari.server.utils.StageUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.directory.server.kerberos.shared.keytab.Keytab;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.Singleton;
@@ -202,6 +208,12 @@ public class KerberosHelperImpl implements KerberosHelper {
@Inject
private ArtifactDAO artifactDAO;
+ @Inject
+ private KerberosKeytabDAO kerberosKeytabDAO;
+
+ @Inject
+ KerberosPrincipalHostDAO kerberosPrincipalHostDAO;
+
/**
* The injector used to create new instances of helper classes like CreatePrincipalsServerAction
* and CreateKeytabFilesServerAction.
@@ -455,8 +467,8 @@ public class KerberosHelperImpl implements KerberosHelper {
// If Ambari is managing it own identities then add AMBARI to the set of installed service so
// that its Kerberos descriptor entries will be included.
if (createAmbariIdentities(existingConfigurations.get(KERBEROS_ENV))) {
- installedServices = new HashMap<String, Set<String>>(installedServices);
- installedServices.put("AMBARI", Collections.singleton("AMBARI_SERVER"));
+ installedServices = new HashMap<>(installedServices);
+ installedServices.put(RootService.AMBARI.name(), Collections.singleton(RootComponent.AMBARI_SERVER.name()));
}
// Create the context to use for filtering Kerberos Identities based on the state of the cluster
@@ -1484,9 +1496,10 @@ public class KerberosHelperImpl implements KerberosHelper {
@Override
public int addIdentities(KerberosIdentityDataFileWriter kerberosIdentityDataFileWriter,
Collection<KerberosIdentityDescriptor> identities,
- Collection<String> identityFilter, String hostname, String serviceName,
+ Collection<String> identityFilter, String hostname, Long hostId, String serviceName,
String componentName, Map<String, Map<String, String>> kerberosConfigurations,
- Map<String, Map<String, String>> configurations, boolean ignoreHeadless)
+ Map<String, Map<String, String>> configurations,
+ Map<String, ResolvedKerberosKeytab> resolvedKeytabs, String realm)
throws IOException {
int identitiesAdded = 0;
@@ -1514,7 +1527,6 @@ public class KerberosHelperImpl implements KerberosHelper {
String keytabFileGroupName = null;
String keytabFileGroupAccess = null;
String keytabFileConfiguration = null;
- boolean keytabIsCachable = false;
if (keytabDescriptor != null) {
keytabFilePath = variableReplacementHelper.replaceVariables(keytabDescriptor.getFile(), configurations);
@@ -1523,24 +1535,109 @@ public class KerberosHelperImpl implements KerberosHelper {
keytabFileGroupName = variableReplacementHelper.replaceVariables(keytabDescriptor.getGroupName(), configurations);
keytabFileGroupAccess = variableReplacementHelper.replaceVariables(keytabDescriptor.getGroupAccess(), configurations);
keytabFileConfiguration = variableReplacementHelper.replaceVariables(keytabDescriptor.getConfiguration(), configurations);
- keytabIsCachable = keytabDescriptor.isCachable();
+ }
+ // Evaluate the principal "pattern" found in the record to generate the "evaluated principal"
+ // by replacing the _HOST and _REALM variables.
+ String evaluatedPrincipal = principal.replace("_HOST", hostname).replace("_REALM", realm);
+
+ ResolvedKerberosKeytab resolvedKeytab = new ResolvedKerberosKeytab(
+ keytabFilePath,
+ keytabFileOwnerName,
+ keytabFileOwnerAccess,
+ keytabFileGroupName,
+ keytabFileGroupAccess,
+ Sets.newHashSet(Pair.of(hostId, Pair.of(evaluatedPrincipal, principalType))),
+ serviceName.equalsIgnoreCase(RootService.AMBARI.name()),
+ componentName.equalsIgnoreCase("AMBARI_SERVER_SELF")
+ );
+ if (resolvedKeytabs.containsKey(keytabFilePath)) {
+ ResolvedKerberosKeytab sameKeytab = resolvedKeytabs.get(keytabFilePath);
+ // validating owner and group
+ boolean differentOwners = false;
+ String warnTemplate = "Keytab '{}' on host '{}' has different {}, originally set to '{}' and '{}:{}' has '{}', using '{}'";
+ if (!resolvedKeytab.getOwnerName().equals(sameKeytab.getOwnerName())) {
+ LOG.warn(warnTemplate,
+ keytabFilePath, hostname, "owners", sameKeytab.getOwnerName(),
+ serviceName, componentName, resolvedKeytab.getOwnerName(),
+ sameKeytab.getOwnerName());
+ differentOwners = true;
+ }
+ if (!resolvedKeytab.getOwnerAccess().equals(sameKeytab.getOwnerAccess())) {
+ LOG.warn(warnTemplate,
+ keytabFilePath, hostname, "owner access", sameKeytab.getOwnerAccess(),
+ serviceName, componentName, resolvedKeytab.getOwnerAccess(),
+ sameKeytab.getOwnerAccess());
+ }
+ // TODO probably fail on group difference. Some services can inject its principals to same keytab, but
+ // TODO with different owners, so make sure that keytabs are accessible through group acls
+ // TODO this includes same group name and group 'r' mode
+ if (!resolvedKeytab.getGroupName().equals(sameKeytab.getGroupName())) {
+ if(differentOwners) {
+ LOG.error(warnTemplate,
+ keytabFilePath, hostname, "groups", sameKeytab.getGroupName(),
+ serviceName, componentName, resolvedKeytab.getGroupName(),
+ sameKeytab.getGroupName());
+ } else {
+ LOG.warn(warnTemplate,
+ keytabFilePath, hostname, "groups", sameKeytab.getGroupName(),
+ serviceName, componentName, resolvedKeytab.getGroupName(),
+ sameKeytab.getGroupName());
+ }
+ }
+ if (!resolvedKeytab.getGroupAccess().equals(sameKeytab.getGroupAccess())) {
+ if(differentOwners) {
+ if (!sameKeytab.getGroupAccess().contains("r")) {
+ LOG.error("Keytab '{}' on host '{}' referenced by multiple identities which have different owners," +
+ "but 'r' attribute missing for group. Make sure all users (that need this keytab) are in '{}' +" +
+ "group and keytab can be read by this group",
+ keytabFilePath,
+ hostname,
+ sameKeytab.getGroupName()
+ );
+ }
+ LOG.error(warnTemplate,
+ keytabFilePath, hostname, "group access", sameKeytab.getGroupAccess(),
+ serviceName, componentName, resolvedKeytab.getGroupAccess(),
+ sameKeytab.getGroupAccess());
+ } else {
+ LOG.warn(warnTemplate,
+ keytabFilePath, hostname, "group access", sameKeytab.getGroupAccess(),
+ serviceName, componentName, resolvedKeytab.getGroupAccess(),
+ sameKeytab.getGroupAccess());
+ }
+ }
+ // end validating
+ // merge principal to keytab
+ sameKeytab.getMappedPrincipals().addAll(resolvedKeytab.getMappedPrincipals());
+ // ensure that keytab file on ambari-server host creating jass file
+ if (sameKeytab.isMustWriteAmbariJaasFile() || resolvedKeytab.isMustWriteAmbariJaasFile()) {
+ sameKeytab.setMustWriteAmbariJaasFile(true);
+ }
+ // ensure that this keytab is ambari-keytab, server will distribute it manually
+ if (sameKeytab.isAmbariServerKeytab() || resolvedKeytab.isAmbariServerKeytab()) {
+ sameKeytab.setAmbariServerKeytab(true);
+ }
+ } else {
+ resolvedKeytabs.put(keytabFilePath, resolvedKeytab);
+ LOG.info("Keytab {} owner:'{}:{}', group:'{}:{}' is defined", keytabFilePath,
+ keytabFileOwnerName, keytabFileOwnerAccess, keytabFileGroupName, keytabFileGroupAccess);
}
// Append an entry to the action data file builder...
+ // TODO obsolete, move to ResolvedKerberosKeytab
if(kerberosIdentityDataFileWriter != null) {
kerberosIdentityDataFileWriter.writeRecord(
hostname,
serviceName,
componentName,
- principal,
+ evaluatedPrincipal,
principalType,
keytabFilePath,
keytabFileOwnerName,
keytabFileOwnerAccess,
keytabFileGroupName,
keytabFileGroupAccess,
- (keytabIsCachable) ? "true" : "false",
- (ignoreHeadless && principalDescriptor.getType() == KerberosPrincipalType.USER) ? "true" : "false");
+ "true");
}
// Add the principal-related configuration to the map of configurations
@@ -1793,6 +1890,48 @@ public class KerberosHelperImpl implements KerberosHelper {
}
}
+ /**
+ * Creates and saves underlying {@link org.apache.ambari.server.orm.entities.KerberosPrincipalEntity},
+ * {@link org.apache.ambari.server.orm.entities.KerberosKeytabEntity} and
+ * {@link org.apache.ambari.server.orm.entities.KerberosPrincipalHostEntity} entities in JPA storage.
+ *
+ * @param resolvedKerberosKeytab kerberos keytab to be persisted
+ */
+ @Override
+ public void processResolvedKeytab(ResolvedKerberosKeytab resolvedKerberosKeytab) {
+ if (kerberosKeytabDAO.find(resolvedKerberosKeytab.getFile()) == null) {
+ kerberosKeytabDAO.create(resolvedKerberosKeytab.getFile());
+ }
+ for (Pair<Long, Pair<String, String>> principalPair : resolvedKerberosKeytab.getMappedPrincipals()) {
+ Pair<String, String> principal = principalPair.getRight();
+ String principalName = principal.getLeft();
+ String principalType = principal.getRight();
+ Long hostId = principalPair.getLeft();
+ if (!kerberosPrincipalDAO.exists(principalName)) {
+ kerberosPrincipalDAO.create(principalName, "service".equalsIgnoreCase(principalType));
+ }
+ if (hostId != null) {
+ if(!kerberosPrincipalHostDAO.exists(principalName, hostId, resolvedKerberosKeytab.getFile())) {
+ kerberosPrincipalHostDAO.create(principalName, hostId, resolvedKerberosKeytab.getFile());
+ }
+ }
+ }
+ }
+
+ @Override
+ public void removeStaleKeytabs(Collection<ResolvedKerberosKeytab> expectedKeytabs) {
+ List<KerberosKeytabEntity> allKeytabs = kerberosKeytabDAO.findAll();
+ Set<KerberosKeytabEntity> staleKeytabs;
+ staleKeytabs = allKeytabs != null ? new HashSet<>(allKeytabs) : Collections.emptySet();
+ for (ResolvedKerberosKeytab keytab : expectedKeytabs) {
+ staleKeytabs.remove(new KerberosKeytabEntity(keytab.getFile()));
+ }
+ for (KerberosKeytabEntity staleKeytab: staleKeytabs) {
+ kerberosPrincipalHostDAO.removeByKeytabPath(staleKeytab.getKeytabPath());
+ kerberosKeytabDAO.remove(staleKeytab);
+ }
+ }
+
@Override
public Map<String, Set<String>> translateConfigurationSpecifications(Collection<String> configurationSpecifications) {
Map<String, Set<String>> translation = null;
@@ -2181,6 +2320,17 @@ public class KerberosHelperImpl implements KerberosHelper {
if (sch.getState() == State.INSTALLED) {
String hostname = sch.getHostName();
+ if(kerberosKeytabDAO.find(keytabFilePath) == null) {
+ kerberosKeytabDAO.create(keytabFilePath);
+ }
+ // create principals
+ if (!kerberosPrincipalDAO.exists(principal)) {
+ kerberosPrincipalDAO.create(principal, false);
+ }
+ if (!kerberosPrincipalHostDAO.exists(principal, sch.getHost().getHostId(), keytabFilePath)) {
+ kerberosPrincipalHostDAO.create(principal, sch.getHost().getHostId(), keytabFilePath);
+ }
+
kerberosIdentityDataFileWriter.writeRecord(
hostname,
Service.Type.KERBEROS.name(),
@@ -2192,7 +2342,6 @@ public class KerberosHelperImpl implements KerberosHelper {
keytabFileOwnerAccess,
keytabFileGroupName,
keytabFileGroupAccess,
- "false",
"false");
hostsWithValidKerberosClient.add(hostname);
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java
index d9a585f..1ffe841 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/MaintenanceStateHelper.java
@@ -24,7 +24,6 @@ import java.util.Set;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.HostNotFoundException;
-import org.apache.ambari.server.controller.RootServiceResponseFactory.Services;
import org.apache.ambari.server.controller.internal.RequestOperationLevel;
import org.apache.ambari.server.controller.internal.RequestResourceFilter;
import org.apache.ambari.server.controller.spi.Resource;
@@ -265,7 +264,7 @@ public class MaintenanceStateHelper {
}
// the AMBARI service is not a real service; it's never in MM
- if( StringUtils.equals(Services.AMBARI.name(), serviceName)){
+ if( StringUtils.equals(RootService.AMBARI.name(), serviceName)){
return MaintenanceState.OFF;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java
index 8c68f41..6d0f3fb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java
@@ -18,6 +18,10 @@
package org.apache.ambari.server.controller;
+import java.util.Set;
+
+import org.apache.ambari.server.state.stack.RepoTag;
+
public class RepositoryResponse {
private String stackName;
@@ -34,10 +38,11 @@ public class RepositoryResponse {
private String versionDefinitionId;
private Long clusterVersionId;
private boolean unique;
+ private Set<RepoTag> tags;
public RepositoryResponse(String baseUrl, String osType, String repoId,
String repoName, String distribution, String components,
- String mirrorsList, String defaultBaseUrl) {
+ String mirrorsList, String defaultBaseUrl, Set<RepoTag> repoTags) {
setBaseUrl(baseUrl);
setOsType(osType);
setRepoId(repoId);
@@ -46,6 +51,7 @@ public class RepositoryResponse {
setComponents(components);
setMirrorsList(mirrorsList);
setDefaultBaseUrl(defaultBaseUrl);
+ setTags(repoTags);
}
public String getStackName() {
@@ -177,4 +183,19 @@ public class RepositoryResponse {
public void setUnique(boolean unique) {
this.unique = unique;
}
+
+
+ /**
+ * @return the repo tags
+ */
+ public Set<RepoTag> getTags() {
+ return tags;
+ }
+
+ /**
+ * @param repoTags the repo tags
+ */
+ public void setTags(Set<RepoTag> repoTags) {
+ tags = repoTags;
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
index a6c69af..8504d07 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ResourceProviderFactory.java
@@ -79,8 +79,8 @@ public interface ResourceProviderFactory {
@Named("upgrade")
UpgradeResourceProvider getUpgradeResourceProvider(AmbariManagementController managementController);
- @Named("ambariConfiguration")
- ResourceProvider getAmbariConfigurationResourceProvider();
+ @Named("rootServiceHostComponentConfiguration")
+ ResourceProvider getRootServiceHostComponentConfigurationResourceProvider();
@Named("clusterStackVersion")
ClusterStackVersionResourceProvider getClusterStackVersionResourceProvider(AmbariManagementController managementController);
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/RootComponent.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RootComponent.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RootComponent.java
new file mode 100644
index 0000000..74cdfcf
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RootComponent.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.controller;
+
+/**
+ * RootComponent is an enumeration of root-level components.
+ */
+public enum RootComponent {
+ AMBARI_SERVER,
+ AMBARI_AGENT
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/RootService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RootService.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RootService.java
new file mode 100644
index 0000000..22f571d
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RootService.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.controller;
+
+/**
+ * RootService is an enumeration of root-level services.
+ */
+public enum RootService {
+ AMBARI(RootComponent.values());
+
+ private final RootComponent[] components;
+
+ RootService(RootComponent[] components) {
+ this.components = components;
+ }
+
+ public RootComponent[] getComponents() {
+ return components;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceResponseFactory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceResponseFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceResponseFactory.java
index ad9ed20..63d41fd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceResponseFactory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RootServiceResponseFactory.java
@@ -62,9 +62,9 @@ public class RootServiceResponseFactory extends
serviceName = request.getServiceName();
if (serviceName != null) {
- Services service;
+ RootService service;
try {
- service = Services.valueOf(serviceName);
+ service = RootService.valueOf(serviceName);
}
catch (IllegalArgumentException ex) {
throw new ObjectNotFoundException("Root service name: " + serviceName);
@@ -74,7 +74,7 @@ public class RootServiceResponseFactory extends
} else {
response = new HashSet<>();
- for (Services service: Services.values())
+ for (RootService service: RootService.values())
response.add(new RootServiceResponse(service.toString()));
}
return response;
@@ -87,10 +87,10 @@ public class RootServiceResponseFactory extends
String serviceName = request.getServiceName();
String componentName = request.getComponentName();
- Services service;
+ RootService service;
try {
- service = Services.valueOf(serviceName);
+ service = RootService.valueOf(serviceName);
}
catch (IllegalArgumentException ex) {
throw new ObjectNotFoundException("Root service name: " + serviceName);
@@ -100,9 +100,9 @@ public class RootServiceResponseFactory extends
}
if (componentName != null) {
- Components component;
+ RootComponent component;
try {
- component = Components.valueOf(componentName);
+ component = RootComponent.valueOf(componentName);
if (!ArrayUtils.contains(service.getComponents(), component))
throw new ObjectNotFoundException("No component name: " + componentName + "in service: " + serviceName);
}
@@ -114,7 +114,7 @@ public class RootServiceResponseFactory extends
getComponentProperties(componentName)));
} else {
- for (Components component: service.getComponents())
+ for (RootComponent component: service.getComponents())
response.add(new RootServiceComponentResponse(serviceName, component.toString(),
getComponentVersion(component.name(), null),
getComponentProperties(component.name())));
@@ -123,7 +123,7 @@ public class RootServiceResponseFactory extends
}
private String getComponentVersion(String componentName, HostResponse host) {
- Components component = Components.valueOf(componentName);
+ RootComponent component = RootComponent.valueOf(componentName);
String componentVersion;
switch (component) {
@@ -150,10 +150,10 @@ public class RootServiceResponseFactory extends
Map<String, String> response;
Set<String> propertiesToHideInResponse;
- Components component = null;
+ RootComponent component = null;
if (componentName != null) {
- component = Components.valueOf(componentName);
+ component = RootComponent.valueOf(componentName);
switch (component) {
case AMBARI_SERVER:
@@ -176,24 +176,6 @@ public class RootServiceResponseFactory extends
return response;
}
-
- public enum Services {
- AMBARI(Components.values());
- private Components[] components;
-
- Services(Components[] components) {
- this.components = components;
- }
-
- public Components[] getComponents() {
- return components;
- }
- }
-
- public enum Components {
- AMBARI_SERVER, AMBARI_AGENT
- }
-
@Override
public Set<RootServiceHostComponentResponse> getRootServiceHostComponent(RootServiceHostComponentRequest request, Set<HostResponse> hosts) throws AmbariException {
Set<RootServiceHostComponentResponse> response = new HashSet<>();
@@ -208,7 +190,7 @@ public class RootServiceResponseFactory extends
Set<HostResponse> filteredHosts = new HashSet<>(hosts);
//Make some filtering of hosts if need
- if (component.getComponentName().equals(Components.AMBARI_SERVER.name())) {
+ if (component.getComponentName().equals(RootComponent.AMBARI_SERVER.name())) {
CollectionUtils.filter(filteredHosts, new Predicate() {
@Override
public boolean evaluate(Object arg0) {
@@ -220,7 +202,7 @@ public class RootServiceResponseFactory extends
for (HostResponse host : filteredHosts) {
String state;
- if (component.getComponentName().equals(Components.AMBARI_SERVER.name())) {
+ if (component.getComponentName().equals(RootComponent.AMBARI_SERVER.name())) {
state = RUNNING_STATE;
} else {
state = host.getHostState().toString();
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
index 5cc2116..5104354 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
@@ -232,6 +232,8 @@ public abstract class AbstractControllerResourceProvider extends AbstractAuthori
return new RootServiceResourceProvider(propertyIds, keyPropertyIds, managementController);
case RootServiceComponent:
return new RootServiceComponentResourceProvider(propertyIds, keyPropertyIds, managementController);
+ case RootServiceComponentConfiguration:
+ return resourceProviderFactory.getRootServiceHostComponentConfigurationResourceProvider();
case RootServiceHostComponent:
return new RootServiceHostComponentResourceProvider(propertyIds, keyPropertyIds, managementController);
case ConfigGroup:
@@ -280,8 +282,6 @@ public abstract class AbstractControllerResourceProvider extends AbstractAuthori
return new ClusterKerberosDescriptorResourceProvider(managementController);
case LoggingQuery:
return new LoggingResourceProvider(propertyIds, keyPropertyIds, managementController);
- case AmbariConfiguration:
- return resourceProviderFactory.getAmbariConfigurationResourceProvider();
case AlertTarget:
return resourceProviderFactory.getAlertTargetResourceProvider();
case ViewInstance:
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractPropertyProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractPropertyProvider.java
index 322596e..05b0eaa 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractPropertyProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractPropertyProvider.java
@@ -45,12 +45,16 @@ import org.apache.ambari.server.security.authorization.AuthorizationHelper;
import org.apache.ambari.server.security.authorization.ResourceType;
import org.apache.ambari.server.security.authorization.RoleAuthorization;
import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Abstract property provider implementation.
*/
public abstract class AbstractPropertyProvider extends BaseProvider implements PropertyProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(AbstractPropertyProvider.class);
+
/**
* The property/metric information for this provider keyed by component name / property id.
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
index 0c32da6..f385f7e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
@@ -267,7 +267,7 @@ public abstract class AbstractProviderModule implements ProviderModule,
private volatile boolean initialized = false;
- protected final static Logger LOG =
+ private static final Logger LOG =
LoggerFactory.getLogger(AbstractProviderModule.class);
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractResourceProvider.java
index 5598650..21a70ca 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractResourceProvider.java
@@ -68,7 +68,7 @@ public abstract class AbstractResourceProvider extends BaseProvider implements R
*/
private final Set<ResourceProviderObserver> observers = new HashSet<>();
- protected final static Logger LOG = LoggerFactory.getLogger(AbstractResourceProvider.class);
+ protected static final Logger LOG = LoggerFactory.getLogger(AbstractResourceProvider.class);
protected final static String PROPERTIES_ATTRIBUTES_REGEX = "properties_attributes/[a-zA-Z][a-zA-Z._-]*$";
public static Pattern propertiesAttributesPattern = Pattern.compile(".*/" + PROPERTIES_ATTRIBUTES_REGEX);
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java
index 4e618e7..290931555 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java
@@ -43,9 +43,13 @@ import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.customactions.ActionDefinition;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class ActionResourceProvider extends AbstractControllerResourceProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(ActionResourceProvider.class);
+
public static final String ACTION_NAME_PROPERTY_ID = PropertyHelper
.getPropertyId("Actions", "action_name");
public static final String ACTION_TYPE_PROPERTY_ID = PropertyHelper
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
index 32f1fd8..9579dca 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertDefinitionResourceProvider.java
@@ -61,6 +61,8 @@ import org.apache.ambari.server.state.alert.Scope;
import org.apache.ambari.server.state.alert.SourceType;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
@@ -73,6 +75,8 @@ import com.google.inject.Inject;
@StaticallyInject
public class AlertDefinitionResourceProvider extends AbstractControllerResourceProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(AlertDefinitionResourceProvider.class);
+
protected static final String ALERT_DEF = "AlertDefinition";
protected static final String ALERT_DEF_CLUSTER_NAME = "AlertDefinition/cluster_name";
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
index cf4e747..0898bc3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertGroupResourceProvider.java
@@ -49,6 +49,8 @@ import org.apache.ambari.server.security.authorization.AuthorizationException;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.alert.AlertTarget;
import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
@@ -61,6 +63,8 @@ import com.google.inject.Inject;
public class AlertGroupResourceProvider extends
AbstractControllerResourceProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(AlertGroupResourceProvider.class);
+
public static final String ALERT_GROUP = "AlertGroup";
public static final String ALERT_GROUP_ID = "AlertGroup/id";
public static final String ALERT_GROUP_CLUSTER_NAME = "AlertGroup/cluster_name";
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
index c71651e..4ab78b7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertResourceProvider.java
@@ -50,6 +50,8 @@ import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -61,6 +63,8 @@ import com.google.inject.Provider;
public class AlertResourceProvider extends ReadOnlyResourceProvider implements
ExtendedResourceProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(AlertResourceProvider.class);
+
public static final String ALERT_ID = "Alert/id";
public static final String ALERT_STATE = "Alert/state";
public static final String ALERT_ORIGINAL_TIMESTAMP = "Alert/original_timestamp";
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AlertTargetResourceProvider.java
----------------------------------------------------------------------
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 43ee7fe..c1e9eb4 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
@@ -53,6 +53,8 @@ import org.apache.ambari.server.state.AlertState;
import org.apache.ambari.server.state.alert.AlertGroup;
import org.apache.ambari.server.state.alert.AlertTarget;
import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.gson.Gson;
import com.google.inject.Inject;
@@ -67,6 +69,8 @@ import com.google.inject.persist.Transactional;
public class AlertTargetResourceProvider extends
AbstractAuthorizedResourceProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(AlertTargetResourceProvider.class);
+
public static final String ALERT_TARGET = "AlertTarget";
public static final String ALERT_TARGET_ID = "AlertTarget/id";
public static final String ALERT_TARGET_NAME = "AlertTarget/name";
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AmbariConfigurationResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AmbariConfigurationResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AmbariConfigurationResourceProvider.java
deleted file mode 100644
index 4f4cc70..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AmbariConfigurationResourceProvider.java
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.server.controller.internal;
-
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.inject.Inject;
-
-import org.apache.ambari.server.AmbariException;
-import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
-import org.apache.ambari.server.controller.spi.NoSuchResourceException;
-import org.apache.ambari.server.controller.spi.Predicate;
-import org.apache.ambari.server.controller.spi.Request;
-import org.apache.ambari.server.controller.spi.RequestStatus;
-import org.apache.ambari.server.controller.spi.Resource;
-import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
-import org.apache.ambari.server.controller.spi.SystemException;
-import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
-import org.apache.ambari.server.controller.utilities.PredicateHelper;
-import org.apache.ambari.server.events.AmbariEvent;
-import org.apache.ambari.server.events.AmbariLdapConfigChangedEvent;
-import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
-import org.apache.ambari.server.orm.dao.AmbariConfigurationDAO;
-import org.apache.ambari.server.orm.entities.AmbariConfigurationEntity;
-import org.apache.ambari.server.orm.entities.ConfigurationBaseEntity;
-import org.apache.ambari.server.security.authorization.RoleAuthorization;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.Sets;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.inject.assistedinject.AssistedInject;
-
-/**
- * Resource provider for AmbariConfiguration resources.
- */
-public class AmbariConfigurationResourceProvider extends AbstractAuthorizedResourceProvider {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(AmbariConfigurationResourceProvider.class);
- private static final String DEFAULT_VERSION_TAG = "Default version";
- private static final Integer DEFAULT_VERSION = 1;
-
- /**
- * Resource property id constants.
- */
- public enum ResourcePropertyId {
-
- ID("AmbariConfiguration/id"),
- TYPE("AmbariConfiguration/type"),
- VERSION("AmbariConfiguration/version"),
- VERSION_TAG("AmbariConfiguration/version_tag"),
- DATA("AmbariConfiguration/data");
-
- private String propertyId;
-
- ResourcePropertyId(String propertyId) {
- this.propertyId = propertyId;
- }
-
- String getPropertyId() {
- return this.propertyId;
- }
-
- public static ResourcePropertyId fromString(String propertyIdStr) {
- ResourcePropertyId propertyIdFromStr = null;
-
- for (ResourcePropertyId id : ResourcePropertyId.values()) {
- if (id.getPropertyId().equals(propertyIdStr)) {
- propertyIdFromStr = id;
- break;
- }
- }
-
- if (propertyIdFromStr == null) {
- throw new IllegalArgumentException("Unsupported property type: " + propertyIdStr);
- }
-
- return propertyIdFromStr;
-
- }
- }
-
- private static Set<String> PROPERTIES = Sets.newHashSet(
- ResourcePropertyId.ID.getPropertyId(),
- ResourcePropertyId.TYPE.getPropertyId(),
- ResourcePropertyId.VERSION.getPropertyId(),
- ResourcePropertyId.VERSION_TAG.getPropertyId(),
- ResourcePropertyId.DATA.getPropertyId());
-
- private static Map<Resource.Type, String> PK_PROPERTY_MAP = Collections.unmodifiableMap(
- new HashMap<Resource.Type, String>() {{
- put(Resource.Type.AmbariConfiguration, ResourcePropertyId.ID.getPropertyId());
- }}
- );
-
-
- @Inject
- private AmbariConfigurationDAO ambariConfigurationDAO;
-
- @Inject
- private AmbariEventPublisher publisher;
-
-
- private Gson gson;
-
- @AssistedInject
- public AmbariConfigurationResourceProvider() {
- super(PROPERTIES, PK_PROPERTY_MAP);
- setRequiredCreateAuthorizations(EnumSet.of(RoleAuthorization.AMBARI_MANAGE_CONFIGURATION));
- setRequiredDeleteAuthorizations(EnumSet.of(RoleAuthorization.AMBARI_MANAGE_CONFIGURATION));
-
- gson = new GsonBuilder().create();
- }
-
- @Override
- protected Set<String> getPKPropertyIds() {
- return Sets.newHashSet(ResourcePropertyId.ID.getPropertyId());
- }
-
- @Override
- public RequestStatus createResourcesAuthorized(Request request) throws SystemException, UnsupportedPropertyException,
- ResourceAlreadyExistsException, NoSuchParentResourceException {
-
- LOGGER.info("Creating new ambari configuration resource ...");
- AmbariConfigurationEntity ambariConfigurationEntity = null;
- try {
- ambariConfigurationEntity = getEntityFromRequest(request);
- } catch (AmbariException e) {
- throw new NoSuchParentResourceException(e.getMessage());
- }
-
- LOGGER.info("Persisting new ambari configuration: {} ", ambariConfigurationEntity);
-
- try {
- ambariConfigurationDAO.create(ambariConfigurationEntity);
- } catch (Exception e) {
- LOGGER.error("Failed to create resource", e);
- throw new ResourceAlreadyExistsException(e.getMessage());
- }
-
- // todo filter by configuration type
- // notify subscribers about the configuration changes
- publisher.publish(new AmbariLdapConfigChangedEvent(AmbariEvent.AmbariEventType.LDAP_CONFIG_CHANGED,
- ambariConfigurationEntity.getId()));
-
- return getRequestStatus(null);
- }
-
-
- @Override
- protected Set<Resource> getResourcesAuthorized(Request request, Predicate predicate) throws SystemException,
- UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
- Set<Resource> resources = Sets.newHashSet();
-
- // retrieves allconfigurations, filtering is done at a higher level
- List<AmbariConfigurationEntity> ambariConfigurationEntities = ambariConfigurationDAO.findAll();
- for (AmbariConfigurationEntity ambariConfigurationEntity : ambariConfigurationEntities) {
- try {
- resources.add(toResource(ambariConfigurationEntity, getPropertyIds()));
- } catch (AmbariException e) {
- LOGGER.error("Error while retrieving ambari configuration", e);
- }
- }
- return resources;
- }
-
- @Override
- protected RequestStatus deleteResourcesAuthorized(Request request, Predicate predicate) throws SystemException,
- UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
-
- Long idFromRequest = Long.valueOf((String) PredicateHelper.getProperties(predicate).get(ResourcePropertyId.ID.getPropertyId()));
-
- if (null == idFromRequest) {
- LOGGER.debug("No resource id provided in the request");
- } else {
- LOGGER.debug("Deleting amari configuration with id: {}", idFromRequest);
- try {
- ambariConfigurationDAO.removeByPK(idFromRequest);
- } catch (IllegalStateException e) {
- throw new NoSuchResourceException(e.getMessage());
- }
-
- }
-
- // notify subscribers about the configuration changes
- publisher.publish(new AmbariLdapConfigChangedEvent(AmbariEvent.AmbariEventType.LDAP_CONFIG_CHANGED, idFromRequest));
-
-
- return getRequestStatus(null);
-
- }
-
- @Override
- protected RequestStatus updateResourcesAuthorized(Request request, Predicate predicate) throws SystemException,
- UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
- Long idFromRequest = Long.valueOf((String) PredicateHelper.getProperties(predicate).get(ResourcePropertyId.ID.getPropertyId()));
-
- AmbariConfigurationEntity persistedEntity = ambariConfigurationDAO.findByPK(idFromRequest);
- if (persistedEntity == null) {
- String errorMsg = String.format("Entity with primary key [ %s ] not found in the database.", idFromRequest);
- LOGGER.error(errorMsg);
- throw new NoSuchResourceException(errorMsg);
- }
-
- try {
-
- AmbariConfigurationEntity entityFromRequest = getEntityFromRequest(request);
- persistedEntity.getConfigurationBaseEntity().setVersionTag(entityFromRequest.getConfigurationBaseEntity().getVersionTag());
- persistedEntity.getConfigurationBaseEntity().setVersion(entityFromRequest.getConfigurationBaseEntity().getVersion());
- persistedEntity.getConfigurationBaseEntity().setType(entityFromRequest.getConfigurationBaseEntity().getType());
- persistedEntity.getConfigurationBaseEntity().setConfigurationData(entityFromRequest.getConfigurationBaseEntity().getConfigurationData());
- persistedEntity.getConfigurationBaseEntity().setConfigurationAttributes(entityFromRequest.getConfigurationBaseEntity().getConfigurationAttributes());
-
-
- ambariConfigurationDAO.update(persistedEntity);
- } catch (AmbariException e) {
- throw new NoSuchParentResourceException(e.getMessage());
- }
-
- publisher.publish(new AmbariLdapConfigChangedEvent(AmbariEvent.AmbariEventType.LDAP_CONFIG_CHANGED,
- persistedEntity.getId()));
-
-
- return getRequestStatus(null);
-
- }
-
- private Resource toResource(AmbariConfigurationEntity entity, Set<String> requestedIds) throws AmbariException {
-
- if (null == entity) {
- throw new IllegalArgumentException("Null entity can't be transformed into a resource");
- }
-
- if (null == entity.getConfigurationBaseEntity()) {
- throw new IllegalArgumentException("Invalid configuration entity can't be transformed into a resource");
- }
- Resource resource = new ResourceImpl(Resource.Type.AmbariConfiguration);
- Set<Map<String, String>> configurationSet = gson.fromJson(entity.getConfigurationBaseEntity().getConfigurationData(), Set.class);
-
- setResourceProperty(resource, ResourcePropertyId.ID.getPropertyId(), entity.getId(), requestedIds);
- setResourceProperty(resource, ResourcePropertyId.TYPE.getPropertyId(), entity.getConfigurationBaseEntity().getType(), requestedIds);
- setResourceProperty(resource, ResourcePropertyId.DATA.getPropertyId(), configurationSet, requestedIds);
- setResourceProperty(resource, ResourcePropertyId.VERSION.getPropertyId(), entity.getConfigurationBaseEntity().getVersion(), requestedIds);
- setResourceProperty(resource, ResourcePropertyId.VERSION_TAG.getPropertyId(), entity.getConfigurationBaseEntity().getVersionTag(), requestedIds);
-
- return resource;
- }
-
- private AmbariConfigurationEntity getEntityFromRequest(Request request) throws AmbariException {
-
- AmbariConfigurationEntity ambariConfigurationEntity = new AmbariConfigurationEntity();
- ambariConfigurationEntity.setConfigurationBaseEntity(new ConfigurationBaseEntity());
-
- // set of resource properties (eache entry in the set belongs to a different resource)
- Set<Map<String, Object>> resourcePropertiesSet = request.getProperties();
-
- if (resourcePropertiesSet.size() != 1) {
- throw new AmbariException("There must be only one resource specified in the request");
- }
-
- // the configuration type must be set
- if (getValueFromResourceProperties(ResourcePropertyId.TYPE, resourcePropertiesSet.iterator().next()) == null) {
- throw new AmbariException("The configuration type must be set");
- }
-
-
- for (ResourcePropertyId resourcePropertyId : ResourcePropertyId.values()) {
- Object requestValue = getValueFromResourceProperties(resourcePropertyId, resourcePropertiesSet.iterator().next());
-
- switch (resourcePropertyId) {
- case DATA:
- if (requestValue == null) {
- throw new IllegalArgumentException("No configuration data is provided in the request");
- }
- ambariConfigurationEntity.getConfigurationBaseEntity().setConfigurationData(gson.toJson(requestValue));
- break;
- case TYPE:
- ambariConfigurationEntity.getConfigurationBaseEntity().setType((String) requestValue);
- break;
- case VERSION:
- Integer version = (requestValue == null) ? DEFAULT_VERSION : Integer.valueOf((String) requestValue);
- ambariConfigurationEntity.getConfigurationBaseEntity().setVersion((version));
- break;
- case VERSION_TAG:
- String versionTag = requestValue == null ? DEFAULT_VERSION_TAG : (String) requestValue;
- ambariConfigurationEntity.getConfigurationBaseEntity().setVersionTag(versionTag);
- break;
- default:
- LOGGER.debug("Ignored property in the request: {}", resourcePropertyId);
- break;
- }
- }
- ambariConfigurationEntity.getConfigurationBaseEntity().setCreateTimestamp(Calendar.getInstance().getTimeInMillis());
- return ambariConfigurationEntity;
-
- }
-
- private Object getValueFromResourceProperties(ResourcePropertyId resourcePropertyIdEnum, Map<String, Object> resourceProperties) {
- LOGGER.debug("Locating resource property [{}] in the resource properties map ...", resourcePropertyIdEnum);
- Object requestValue = null;
-
- if (resourceProperties.containsKey(resourcePropertyIdEnum.getPropertyId())) {
- requestValue = resourceProperties.get(resourcePropertyIdEnum.getPropertyId());
- LOGGER.debug("Found resource property {} in the resource properties map, value: {}", resourcePropertyIdEnum, requestValue);
- }
- return requestValue;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ArtifactResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ArtifactResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ArtifactResourceProvider.java
index c5c02cf..567cfa9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ArtifactResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ArtifactResourceProvider.java
@@ -47,6 +47,8 @@ import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.orm.dao.ArtifactDAO;
import org.apache.ambari.server.orm.entities.ArtifactEntity;
import org.apache.ambari.server.state.Cluster;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.gson.Gson;
import com.google.inject.Inject;
@@ -62,6 +64,8 @@ import com.google.inject.Inject;
@StaticallyInject
public class ArtifactResourceProvider extends AbstractResourceProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(ArtifactResourceProvider.class);
+
public static final String RESPONSE_KEY = "Artifacts";
public static final String ARTIFACT_NAME = "artifact_name";
public static final String CLUSTER_NAME = "cluster_name";
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseProvider.java
index 135eefe..c9fee7d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseProvider.java
@@ -61,11 +61,7 @@ public abstract class BaseProvider {
*/
private final Map<String, Pattern> patterns;
- /**
- * The logger.
- */
- protected final static Logger LOG =
- LoggerFactory.getLogger(BaseProvider.class);
+ private static final Logger LOG = LoggerFactory.getLogger(BaseProvider.class);
/**
* The regex pattern that will match on all $1, $2.method(0), and
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintConfigurationProcessor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintConfigurationProcessor.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintConfigurationProcessor.java
index 939b4a1..d2f24d9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintConfigurationProcessor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintConfigurationProcessor.java
@@ -67,7 +67,7 @@ import com.google.common.collect.Sets;
*/
public class BlueprintConfigurationProcessor {
- protected final static Logger LOG = LoggerFactory.getLogger(BlueprintConfigurationProcessor.class);
+ private static final Logger LOG = LoggerFactory.getLogger(BlueprintConfigurationProcessor.class);
private final static String COMMAND_RETRY_ENABLED_PROPERTY_NAME = "command_retry_enabled";
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java
index 73d2490..67f5448 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintResourceProvider.java
@@ -60,6 +60,8 @@ import org.apache.ambari.server.topology.InvalidTopologyException;
import org.apache.ambari.server.topology.SecurityConfiguration;
import org.apache.ambari.server.topology.SecurityConfigurationFactory;
import org.apache.ambari.server.utils.SecretReference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
@@ -71,6 +73,8 @@ import com.google.gson.Gson;
*/
public class BlueprintResourceProvider extends AbstractControllerResourceProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(BlueprintResourceProvider.class);
+
// ----- Property ID constants ---------------------------------------------
// Blueprints
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
index 28acdb3..9043297 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
@@ -21,6 +21,7 @@ package org.apache.ambari.server.controller.internal;
import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.AGENT_STACK_RETRY_COUNT;
import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.AGENT_STACK_RETRY_ON_UNAVAILABILITY;
import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.DB_NAME;
+import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.GPL_LICENSE_ACCEPTED;
import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.GROUP_LIST;
import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOST_SYS_PREPPED;
import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JDK_LOCATION;
@@ -368,6 +369,7 @@ public class ClientConfigResourceProvider extends AbstractControllerResourceProv
hostLevelParams.putAll(managementController.getRcaParameters());
hostLevelParams.put(AGENT_STACK_RETRY_ON_UNAVAILABILITY, configs.isAgentStackRetryOnInstallEnabled());
hostLevelParams.put(AGENT_STACK_RETRY_COUNT, configs.getAgentStackRetryOnInstallCount());
+ hostLevelParams.put(GPL_LICENSE_ACCEPTED, configs.getGplLicenseAccepted().toString());
// Write down os specific info for the service
ServiceOsSpecific anyOs = null;
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
index 61e0f99..cc0cea3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
@@ -56,6 +56,8 @@ import org.apache.ambari.server.topology.SecurityConfiguration;
import org.apache.ambari.server.topology.SecurityConfigurationFactory;
import org.apache.ambari.server.topology.TopologyManager;
import org.apache.ambari.server.topology.TopologyRequestFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
import com.google.gson.Gson;
@@ -66,6 +68,8 @@ import com.google.gson.Gson;
*/
public class ClusterResourceProvider extends AbstractControllerResourceProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(ClusterResourceProvider.class);
+
// ----- Property ID constants ---------------------------------------------
// Clusters
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
index 1ef1854..6b1acf3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
@@ -88,7 +88,8 @@ import org.apache.ambari.server.utils.StageUtils;
import org.apache.ambari.server.utils.VersionUtils;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.math.NumberUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
@@ -104,6 +105,8 @@ import com.google.inject.persist.Transactional;
@StaticallyInject
public class ClusterStackVersionResourceProvider extends AbstractControllerResourceProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(ClusterStackVersionResourceProvider.class);
+
// ----- Property ID constants ---------------------------------------------
protected static final String CLUSTER_STACK_VERSION_ID_PROPERTY_ID = PropertyHelper.getPropertyId("ClusterStackVersions", "id");
@@ -258,7 +261,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
Collections.sort(entities, new Comparator<RepositoryVersionEntity>() {
@Override
public int compare(RepositoryVersionEntity o1, RepositoryVersionEntity o2) {
- return compareVersions(o1.getVersion(), o2.getVersion());
+ return VersionUtils.compareVersionsWithBuild(o1.getVersion(), o2.getVersion(), 4);
}
});
@@ -502,7 +505,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
continue;
}
- int compare = compareVersions(hostRepoVersion.getVersion(), desiredRepoVersion);
+ int compare = VersionUtils.compareVersionsWithBuild(hostRepoVersion.getVersion(), desiredRepoVersion, 4);
// ignore earlier versions
if (compare <= 0) {
@@ -702,18 +705,10 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
// Determine repositories for host
String osFamily = host.getOsFamily();
+ OperatingSystemEntity osEntity = repoVersionHelper.getOSEntityForHost(host, repoVersion);
- OperatingSystemEntity osEntity = null;
- for (OperatingSystemEntity os : repoVersion.getOperatingSystems()) {
- if (os.getOsType().equals(osFamily)) {
- osEntity = os;
- break;
- }
- }
-
- if (null == osEntity || CollectionUtils.isEmpty(osEntity.getRepositories())) {
- throw new SystemException(String.format("Repositories for os type %s are " +
- "not defined for version %s of Stack %s.",
+ if (CollectionUtils.isEmpty(osEntity.getRepositories())) {
+ throw new SystemException(String.format("Repositories for os type %s are not defined for version %s of Stack %s.",
osFamily, repoVersion.getVersion(), stackId));
}
@@ -732,7 +727,6 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
return null;
}
-
Map<String, String> roleParams = repoVersionHelper.buildRoleParams(managementController, repoVersion,
osFamily, servicesOnHost);
@@ -746,7 +740,7 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
actionContext.setRepositoryVersion(repoVersion);
actionContext.setTimeout(Short.valueOf(configuration.getDefaultAgentTaskTimeout(true)));
- repoVersionHelper.addCommandRepository(actionContext, repoVersion, osEntity);
+ repoVersionHelper.addCommandRepositoryToContext(actionContext, osEntity);
return actionContext;
}
@@ -807,39 +801,6 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
}
/**
- * Additional check over {@link VersionUtils#compareVersions(String, String)} that
- * compares build numbers
- */
- private static int compareVersions(String version1, String version2) {
- version1 = (null == version1) ? "0" : version1;
- version2 = (null == version2) ? "0" : version2;
-
- // check _exact_ equality
- if (StringUtils.equals(version1, version2)) {
- return 0;
- }
-
- int compare = VersionUtils.compareVersions(version1, version2);
- if (0 != compare) {
- return compare;
- }
-
- int v1 = 0;
- int v2 = 0;
- if (version1.indexOf('-') > -1) {
- v1 = NumberUtils.toInt(version1.substring(version1.indexOf('-')), 0);
- }
-
- if (version2.indexOf('-') > -1) {
- v2 = NumberUtils.toInt(version2.substring(version2.indexOf('-')), 0);
- }
-
- compare = v2 - v1;
-
- return Integer.compare(compare, 0);
- }
-
- /**
* Ensures that the stack tools and stack features are set on
* {@link ConfigHelper#CLUSTER_ENV} for the stack of the repository being
* distributed. This step ensures that the new repository can be distributed
http://git-wip-us.apache.org/repos/asf/ambari/blob/e83bf1bd/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
index f05ffbe..fa963c6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
@@ -51,6 +51,8 @@ import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.repository.ManifestServiceInfo;
import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.stack.UpgradePack;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
@@ -64,6 +66,8 @@ import com.google.inject.Provider;
@StaticallyInject
public class CompatibleRepositoryVersionResourceProvider extends ReadOnlyResourceProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(CompatibleRepositoryVersionResourceProvider.class);
+
// ----- Property ID constants ---------------------------------------------
public static final String REPOSITORY_VERSION_ID_PROPERTY_ID = "CompatibleRepositoryVersions/id";