You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ma...@apache.org on 2012/11/07 09:32:13 UTC
svn commit: r1406494 [1/3] - in /incubator/ambari/branches/AMBARI-666: ./
ambari-agent/ ambari-agent/src/main/puppet/modules/hdp-hbase/templates/
ambari-agent/src/main/puppet/modules/hdp-repos/manifests/
ambari-agent/src/main/puppet/modules/hdp-repos/t...
Author: mahadev
Date: Wed Nov 7 08:32:11 2012
New Revision: 1406494
URL: http://svn.apache.org/viewvc?rev=1406494&view=rev
Log:
AMBARI-975. Fix support for cascading updates to configs. (Hitesh Shah via mahadev)
Added:
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigurationResourceProvider.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/TaskResourceProvider.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserResourceProvider.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ComponentConfigMappingDAO.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostComponentConfigMappingDAO.java
Modified:
incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt
incubator/ambari/branches/AMBARI-666/ambari-agent/pom.xml
incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-hbase/templates/log4j.properties.erb
incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-repos/manifests/process_repo.pp
incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-repos/templates/repo.erb
incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/python/ambari_agent/RepoInstaller.py
incubator/ambari/branches/AMBARI-666/ambari-server/pom.xml
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/agent/rest/AgentResource.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ResourceProviderImpl.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/metadata/RoleCommandOrder.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostRoleCommandDAO.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/Service.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponent.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentHost.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/main/python/setupAgent.py
incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ResourceProviderImplTest.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostTest.java
Modified: incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt?rev=1406494&r1=1406493&r2=1406494&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt (original)
+++ incubator/ambari/branches/AMBARI-666/AMBARI-666-CHANGES.txt Wed Nov 7 08:32:11 2012
@@ -12,6 +12,9 @@ AMBARI-666 branch (unreleased changes)
NEW FEATURES
+ AMBARI-975. Fix support for cascading updates to configs. (Hitesh Shah
+ via mahadev)
+
AMBARI-971. Add api support for creating multiple resources in a single
request. (John Speidel via mahadev)
Modified: incubator/ambari/branches/AMBARI-666/ambari-agent/pom.xml
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-agent/pom.xml?rev=1406494&r1=1406493&r2=1406494&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-agent/pom.xml (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-agent/pom.xml Wed Nov 7 08:32:11 2012
@@ -16,6 +16,12 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+ <parent>
+ <groupId>org.apache.ambari</groupId>
+ <artifactId>ambari-project</artifactId>
+ <version>1.0.3-SNAPSHOT</version>
+ <relativePath>../ambari-project</relativePath>
+ </parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.ambari</groupId>
<artifactId>ambari-agent</artifactId>
@@ -96,7 +102,6 @@
</execution>
</executions>
</plugin>
-
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>rpm-maven-plugin</artifactId>
@@ -117,7 +122,6 @@
<require>puppet = 2.7.9</require>
</requires>
<mappings>
-
<mapping>
<directory>/usr/lib/python2.6/site-packages/ambari_agent</directory>
<sources>
@@ -126,7 +130,6 @@
</source>
</sources>
</mapping>
-
<mapping>
<directory>/var/lib/${project.artifactId}/puppet</directory>
<sources>
@@ -135,7 +138,6 @@
</source>
</sources>
</mapping>
-
<mapping>
<directory>/etc/ambari</directory>
<sources>
@@ -144,7 +146,6 @@
</source>
</sources>
</mapping>
-
<mapping>
<directory>/usr/sbin</directory>
<filemode>744</filemode>
@@ -154,7 +155,6 @@
</source>
</sources>
</mapping>
-
<mapping>
<directory>/var/run/ambari</directory>
</mapping>
@@ -167,12 +167,10 @@
<mapping>
<directory>/var/ambari</directory>
</mapping>
-
<!-- -->
</mappings>
</configuration>
</plugin>
-
</plugins>
<extensions>
<extension>
Modified: incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-hbase/templates/log4j.properties.erb
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-hbase/templates/log4j.properties.erb?rev=1406494&r1=1406493&r2=1406494&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-hbase/templates/log4j.properties.erb (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-hbase/templates/log4j.properties.erb Wed Nov 7 08:32:11 2012
@@ -64,7 +64,7 @@ log4j.appender.console.layout.Conversion
log4j.logger.org.apache.zookeeper=INFO
#log4j.logger.org.apache.hadoop.fs.FSNamesystem=DEBUG
-log4j.logger.org.apache.hadoop.hbase=DEBUG
+log4j.logger.org.apache.hadoop.hbase=INFO
# Make these two classes INFO-level. Make them DEBUG to see more zk debug.
log4j.logger.org.apache.hadoop.hbase.zookeeper.ZKUtil=INFO
log4j.logger.org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher=INFO
Modified: incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-repos/manifests/process_repo.pp
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-repos/manifests/process_repo.pp?rev=1406494&r1=1406493&r2=1406494&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-repos/manifests/process_repo.pp (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-repos/manifests/process_repo.pp Wed Nov 7 08:32:11 2012
@@ -22,6 +22,7 @@ class hdp-repos::process_repo(
$os_type,
$repo_id,
$base_url,
+ $mirror_list,
$repo_name
) inherits hdp-hadoop::params
{
Modified: incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-repos/templates/repo.erb
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-repos/templates/repo.erb?rev=1406494&r1=1406493&r2=1406494&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-repos/templates/repo.erb (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/puppet/modules/hdp-repos/templates/repo.erb Wed Nov 7 08:32:11 2012
@@ -21,6 +21,6 @@
#
[<%=repo_id%>]
name=<%=repo_name %>
-baseurl=<%=base_url %>
+<%if scope.function_hdp_is_empty(base_url)%>mirrorlist=<%=mirror_list %><% else %>baseurl=<%=base_url %><% end %>
path=/
enabled=1
Modified: incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/python/ambari_agent/RepoInstaller.py
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/python/ambari_agent/RepoInstaller.py?rev=1406494&r1=1406493&r2=1406494&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/python/ambari_agent/RepoInstaller.py (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-agent/src/main/python/ambari_agent/RepoInstaller.py Wed Nov 7 08:32:11 2012
@@ -48,12 +48,22 @@ class RepoInstaller:
def generateFiles(self):
repoPuppetFiles = []
for repo in self.repoInfoList:
- repoFile = open(self.path + os.sep + repo['repo_id'] + '-' + str(self.taskId) + PUPPET_EXT, 'w+')
+ repoFile = open(self.path + os.sep + repo['repoId'] + '-' + str(self.taskId) + PUPPET_EXT, 'w+')
writeImports(repoFile, self.modulesdir, inputFileName='imports.txt')
+
+ baseUrl = ''
+ mirrorList = ''
+
+ if repo.has_key('baseUrl'):
+ baseUrl = repo['baseUrl']
+
+ if repo.has_key('mirrorsList'):
+ mirrorList = repo['mirrorsList']
+
repoFile.write('node /default/ {')
- repoFile.write('class{ "hdp-repos::process_repo" : ' + ' os_type => "' + repo['os_type'] +
- '", repo_id => "' + repo['repo_id'] + '", base_url => "' + repo['base_url'] +
- '", repo_name => "' + repo['repo_name'] + '" }' )
+ repoFile.write('class{ "hdp-repos::process_repo" : ' + ' os_type => "' + repo['osType'] +
+ '", repo_id => "' + repo['repoId'] + '", base_url => "' + baseUrl +
+ '", mirror_list => "' + mirrorList +'", repo_name => "' + repo['repoName'] + '" }' )
repoFile.write('}')
repoFile.close()
repoPuppetFiles.append(repoFile.name)
@@ -70,7 +80,7 @@ def main():
jsonFile = open('test.json', 'r')
jsonStr = jsonFile.read()
parsedJson = json.loads(jsonStr)
- repoInstaller = RepoInstaller(parsedJson, '/tmp', '/home/centos/ambari_repo_info/ambari-agent/src/main/puppet/modules')
+ repoInstaller = RepoInstaller(parsedJson, '/tmp', '/home/centos/ambari_ws/ambari-agent/src/main/puppet/modules')
repoInstaller.installRepos()
if __name__ == '__main__':
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/pom.xml
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/pom.xml?rev=1406494&r1=1406493&r2=1406494&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/pom.xml (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/pom.xml Wed Nov 7 08:32:11 2012
@@ -22,7 +22,7 @@
<artifactId>ambari-server</artifactId>
<packaging>jar</packaging>
<name>Ambari Server</name>
- <version>1.0.3</version>
+ <version>1.0.3-SNAPSHOT</version>
<description>Ambari Server</description>
<build>
<plugins>
@@ -156,6 +156,12 @@
<source>
<location>src/main/resources/Ambari-DDL.sql</location>
</source>
+ </sources>
+ </mapping>
+
+ <mapping>
+ <directory>/var/lib/ambari-server/resources/stacks</directory>
+ <sources>
<source>
<location>src/main/resources/stacks</location>
</source>
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/agent/rest/AgentResource.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/agent/rest/AgentResource.java?rev=1406494&r1=1406493&r2=1406494&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/agent/rest/AgentResource.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/agent/rest/AgentResource.java Wed Nov 7 08:32:11 2012
@@ -53,6 +53,7 @@ public class AgentResource {
@Inject
public static void init(HeartBeatHandler instance) {
hh = instance;
+ hh.start();
}
/**
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java?rev=1406494&r1=1406493&r2=1406494&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java Wed Nov 7 08:32:11 2012
@@ -95,7 +95,7 @@ public class AmbariMetaInfo {
private static final String PROPERTY_XML_PROPERTY_VALUE = "value";
private static final String PROPERTY_XML_PROPERTY_DESCRIPTION = "description";
-
+
/**
* Ambari Meta Info Object
* @param conf Configuration API to be used.
@@ -106,7 +106,7 @@ public class AmbariMetaInfo {
String stackPath = conf.getMetadataPath();
this.stackRoot = new File(stackPath);
}
-
+
@Inject
public AmbariMetaInfo(File stackRoot) throws Exception {
this.stackRoot = stackRoot;
@@ -542,7 +542,6 @@ public class AmbariMetaInfo {
}
}
}
-
} catch (Exception e) {
e.printStackTrace();
}
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java?rev=1406494&r1=1406493&r2=1406494&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java Wed Nov 7 08:32:11 2012
@@ -164,22 +164,22 @@ public class AmbariManagementControllerI
// FIXME add support for desired configs at cluster level
boolean foundInvalidHosts = false;
- String invalidHostsStr = "";
+ StringBuilder invalidHostsStr = new StringBuilder();
if (request.getHostNames() != null) {
for (String hostname : request.getHostNames()) {
try {
clusters.getHost(hostname);
} catch (HostNotFoundException e) {
if (foundInvalidHosts) {
- invalidHostsStr += ",";
+ invalidHostsStr.append(",");
}
foundInvalidHosts = true;
- invalidHostsStr += hostname;
+ invalidHostsStr.append(hostname);
}
}
}
if (foundInvalidHosts) {
- throw new HostNotFoundException(invalidHostsStr);
+ throw new HostNotFoundException(invalidHostsStr.toString());
}
clusters.addCluster(request.getClusterName());
@@ -818,23 +818,23 @@ public class AmbariManagementControllerI
cluster.addDesiredConfig(config);
}
-
+
@Override
public void createUsers(Set<UserRequest> requests) throws AmbariException {
-
+
for (UserRequest request : requests) {
if (null == request.getUsername() || request.getUsername().isEmpty() ||
null == request.getPassword() || request.getPassword().isEmpty()) {
throw new AmbariException("Username and password must be supplied.");
}
-
+
User user = users.getAnyUser(request.getUsername());
if (null != user)
throw new AmbariException("User already exists.");
-
+
users.createUser(request.getUsername(), request.getPassword());
-
+
if (0 != request.getRoles().size()) {
user = users.getAnyUser(request.getUsername());
if (null != user) {
@@ -845,9 +845,9 @@ public class AmbariManagementControllerI
}
}
}
-
+
}
-
+
private Stage createNewStage(Cluster cluster, long requestId) {
String logDir = baseLogDir + "/" + requestId;
Stage stage = new Stage(requestId, logDir, cluster.getClusterName());
@@ -1276,7 +1276,8 @@ public class AmbariManagementControllerI
clusters.mapHostsToCluster(request.getHostNames(),
request.getClusterName());
- if (!request.getStackVersion().equals(c.getDesiredStackVersion())) {
+ if (!request.getStackVersion().equals(
+ c.getDesiredStackVersion().getStackId())) {
throw new IllegalArgumentException("Update of desired stack version"
+ " not supported");
}
@@ -1364,9 +1365,11 @@ public class AmbariManagementControllerI
}
}
- for (String serviceName : changedComponentCount.keySet()) {
+ for (Entry<String, Map<String, Integer>> entry :
+ changedComponentCount.entrySet()) {
+ String serviceName = entry.getKey();
// smoke test service if more than one component is started
- if (changedComponentCount.get(serviceName).size() > 1) {
+ if (entry.getValue().size() > 1) {
smokeTestServices.add(serviceName);
continue;
}
@@ -1388,7 +1391,7 @@ public class AmbariManagementControllerI
if (!changedScHosts.isEmpty()) {
long nowTimestamp = System.currentTimeMillis();
- requestId = new Long(actionManager.getNextRequestId());
+ requestId = Long.valueOf(actionManager.getNextRequestId());
// FIXME cannot work with a single stage
// multiple stages may be needed for reconfigure
@@ -1518,6 +1521,10 @@ public class AmbariManagementControllerI
for (Entry<State, List<Service>> entry : changedServices.entrySet()) {
State newState = entry.getKey();
for (Service s : entry.getValue()) {
+ if (s.isClientOnlyService()
+ && newState == State.STARTED) {
+ continue;
+ }
s.setDesiredState(newState);
}
}
@@ -1879,14 +1886,21 @@ public class AmbariManagementControllerI
for (Entry<String,String> entry : request.getConfigVersions().entrySet()) {
Config config = cluster.getDesiredConfig(entry.getKey(), entry.getValue());
updated.put(config.getType(), config);
- if (!updated.isEmpty()) {
- s.updateDesiredConfigs(updated);
- s.persist();
- }
+ }
- // FIXME delete relevant config types at component
- // and hostcomponent level
- // handle recursive updates to all components and hostcomponents
+ if (!updated.isEmpty()) {
+ s.updateDesiredConfigs(updated);
+ s.persist();
+ }
+
+ for (ServiceComponent sc : s.getServiceComponents().values()) {
+ sc.deleteDesiredConfigs(updated.keySet());
+ for (ServiceComponentHost sch :
+ sc.getServiceComponentHosts().values()) {
+ sch.deleteDesiredConfigs(updated.keySet());
+ sch.persist();
+ }
+ sc.persist();
}
}
}
@@ -2136,13 +2150,17 @@ public class AmbariManagementControllerI
Config config = cluster.getDesiredConfig(
entry.getKey(), entry.getValue());
updated.put(config.getType(), config);
- if (!updated.isEmpty()) {
- sc.updateDesiredConfigs(updated);
- sc.persist();
- }
}
- // TODO handle recursive updates to all hostcomponents
+ if (!updated.isEmpty()) {
+ sc.updateDesiredConfigs(updated);
+ for (ServiceComponentHost sch :
+ sc.getServiceComponentHosts().values()) {
+ sch.deleteDesiredConfigs(updated.keySet());
+ sch.persist();
+ }
+ sc.persist();
+ }
}
}
@@ -2419,7 +2437,7 @@ public class AmbariManagementControllerI
return doStageCreation(cluster, null,
null, changedScHosts);
}
-
+
@Override
public synchronized void updateUsers(Set<UserRequest> requests) throws AmbariException {
for (UserRequest request : requests) {
@@ -2431,17 +2449,17 @@ public class AmbariManagementControllerI
users.modifyPassword(u.getUserName(), request.getOldPassword(),
request.getPassword());
}
-
+
if (request.getRoles().size() > 0) {
for (String role : u.getRoles()) {
users.removeRoleFromUser(u, role);
}
-
+
for (String role : request.getRoles()) {
users.addRoleToUser(u, role);
}
}
-
+
}
}
@@ -2493,11 +2511,11 @@ public class AmbariManagementControllerI
// TODO Auto-generated method stub
throw new AmbariException("Delete host components not supported");
}
-
+
@Override
public void deleteUsers(Set<UserRequest> requests)
throws AmbariException {
-
+
for (UserRequest r : requests) {
User u = users.getAnyUser(r.getUsername());
if (null != u)
@@ -2670,39 +2688,39 @@ public class AmbariManagementControllerI
}
return response;
}
-
+
@Override
public Set<UserResponse> getUsers(Set<UserRequest> requests)
throws AmbariException {
-
+
Set<UserResponse> responses = new HashSet<UserResponse>();
for (UserRequest r : requests) {
-
+
// get them all
if (null == r.getUsername()) {
for (User u : users.getAllUsers()) {
responses.add(new UserResponse(u.getUserName()));
}
} else {
-
+
User u = users.getAnyUser(r.getUsername());
-
+
if (null == u) {
throw new AmbariException("Cannot find user '" + r.getUsername() + "'");
}
-
+
UserResponse resp = new UserResponse(u.getUserName());
resp.setRoles(new HashSet<String>(u.getRoles()));
responses.add(resp);
}
}
-
+
return responses;
}
-
-
+
+
private String getClientHostForRunningAction(Cluster cluster,
Service service) throws AmbariException {
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java?rev=1406494&r1=1406493&r2=1406494&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java Wed Nov 7 08:32:11 2012
@@ -68,9 +68,9 @@ import com.sun.jersey.spi.container.serv
@Singleton
public class AmbariServer {
private static Logger LOG = LoggerFactory.getLogger(AmbariServer.class);
- public static int CLIENT_ONE_WAY = 4080;
- public static int CLIENT_TWO_WAY = 8443;
- public static int CLIENT_API_PORT = 8080;
+ public static final int CLIENT_ONE_WAY = 4080;
+ public static final int CLIENT_TWO_WAY = 8443;
+ public static final int CLIENT_API_PORT = 8080;
private Server server = null;
private Server serverForAgent = null;
Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java?rev=1406494&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActionResourceProvider.java Wed Nov 7 08:32:11 2012
@@ -0,0 +1,114 @@
+/**
+ * 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.internal;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.controller.ActionRequest;
+import org.apache.ambari.server.controller.ActionResponse;
+import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.PropertyId;
+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.utilities.PropertyHelper;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Resource provider for action resources.
+ */
+class ActionResourceProvider extends ResourceProviderImpl {
+
+ // ----- Property ID constants ---------------------------------------------
+
+ // Actions
+ protected static final PropertyId ACTION_CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("cluster_name", "Actions");
+ protected static final PropertyId ACTION_SERVICE_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("service_name", "Actions");
+ protected static final PropertyId ACTION_ACTION_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("action_name", "Actions");
+
+
+ private static Set<PropertyId> pkPropertyIds =
+ new HashSet<PropertyId>(Arrays.asList(new PropertyId[]{
+ ACTION_CLUSTER_NAME_PROPERTY_ID,
+ ACTION_SERVICE_NAME_PROPERTY_ID}));
+
+ ActionResourceProvider(Set<PropertyId> propertyIds,
+ Map<Resource.Type, PropertyId> keyPropertyIds,
+ AmbariManagementController managementController) {
+
+ super(propertyIds, keyPropertyIds, managementController);
+ }
+
+ @Override
+ public RequestStatus createResources(Request request) throws AmbariException {
+ Set<ActionRequest> requests = new HashSet<ActionRequest>();
+ for (Map<PropertyId, Object> propertyMap : request.getProperties()) {
+ requests.add(getRequest(propertyMap));
+ }
+ return getRequestStatus(getManagementController().createActions(requests));
+ }
+
+ @Override
+ public Set<Resource> getResources(Request request, Predicate predicate)
+ throws AmbariException {
+ ActionRequest actionRequest = getRequest(getProperties(predicate));
+
+ // TODO : handle multiple requests
+ Set<ActionResponse> responses = getManagementController().getActions(
+ Collections.singleton(actionRequest));
+
+ Set<Resource> resources = new HashSet<Resource>();
+ for (ActionResponse response : responses) {
+ Resource resource = new ResourceImpl(Resource.Type.Action);
+ resource.setProperty(ACTION_CLUSTER_NAME_PROPERTY_ID, response.getClusterName());
+ resource.setProperty(ACTION_SERVICE_NAME_PROPERTY_ID, response.getServiceName());
+ resource.setProperty(ACTION_ACTION_NAME_PROPERTY_ID, response.getActionName());
+ resources.add(resource);
+ }
+ return resources;
+ }
+
+ @Override
+ public RequestStatus updateResources(Request request, Predicate predicate)
+ throws AmbariException {
+ throw new UnsupportedOperationException("Not currently supported.");
+ }
+
+ @Override
+ public RequestStatus deleteResources(Predicate predicate) throws AmbariException {
+ throw new UnsupportedOperationException("Not currently supported.");
+ }
+
+ @Override
+ protected Set<PropertyId> getPKPropertyIds() {
+ return pkPropertyIds;
+ }
+
+ private ActionRequest getRequest(Map<PropertyId, Object> properties) {
+ return new ActionRequest(
+ (String) properties.get(ACTION_CLUSTER_NAME_PROPERTY_ID),
+ (String) properties.get(ACTION_SERVICE_NAME_PROPERTY_ID),
+ (String) properties.get(ACTION_ACTION_NAME_PROPERTY_ID),
+ null);
+ }
+}
Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java?rev=1406494&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java Wed Nov 7 08:32:11 2012
@@ -0,0 +1,146 @@
+/**
+ * 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.internal;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.ClusterRequest;
+import org.apache.ambari.server.controller.ClusterResponse;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.PropertyId;
+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.utilities.PropertyHelper;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Resource provider for cluster resources.
+ */
+class ClusterResourceProvider extends ResourceProviderImpl{
+
+ // ----- Property ID constants ---------------------------------------------
+
+ // Clusters
+ protected static final PropertyId CLUSTER_ID_PROPERTY_ID = PropertyHelper.getPropertyId("cluster_id", "Clusters");
+ protected static final PropertyId CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("cluster_name", "Clusters");
+ protected static final PropertyId CLUSTER_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("version", "Clusters");
+ protected static final PropertyId CLUSTER_HOSTS_PROPERTY_ID = PropertyHelper.getPropertyId("hosts", "Clusters");
+
+
+ private static Set<PropertyId> pkPropertyIds =
+ new HashSet<PropertyId>(Arrays.asList(new PropertyId[]{
+ CLUSTER_ID_PROPERTY_ID}));
+
+ // ----- Constructors ----------------------------------------------------
+
+ /**
+ * Create a new resource provider for the given management controller.
+ *
+ * @param propertyIds the property ids
+ * @param keyPropertyIds the key property ids
+ * @param managementController the management controller
+ */
+ ClusterResourceProvider(Set<PropertyId> propertyIds,
+ Map<Resource.Type, PropertyId> keyPropertyIds,
+ AmbariManagementController managementController) {
+ super(propertyIds, keyPropertyIds, managementController);
+ }
+
+// ----- ResourceProvider ------------------------------------------------
+
+ @Override
+ public RequestStatus createResources(Request request) throws AmbariException {
+
+ for (Map<PropertyId, Object> properties : request.getProperties()) {
+ getManagementController().createCluster(getRequest(properties));
+ }
+ return getRequestStatus(null);
+ }
+
+ @Override
+ public Set<Resource> getResources(Request request, Predicate predicate) throws AmbariException {
+ ClusterRequest clusterRequest = getRequest(getProperties(predicate));
+ Set<PropertyId> requestedIds = PropertyHelper.getRequestPropertyIds(getPropertyIds(), request, predicate);
+
+ // TODO : handle multiple requests
+ Set<ClusterResponse> responses = getManagementController().getClusters(Collections.singleton(clusterRequest));
+
+ Set<Resource> resources = new HashSet<Resource>();
+ for (ClusterResponse response : responses) {
+ Resource resource = new ResourceImpl(Resource.Type.Cluster);
+ setResourceProperty(resource, CLUSTER_ID_PROPERTY_ID, response.getClusterId(), requestedIds);
+ setResourceProperty(resource, CLUSTER_NAME_PROPERTY_ID, response.getClusterName(), requestedIds);
+ // FIXME requestedIds does not seem to be filled in properly for
+ // non-partial responses
+ resource.setProperty(CLUSTER_VERSION_PROPERTY_ID,
+ response.getDesiredStackVersion());
+ resources.add(resource);
+ }
+ return resources;
+ }
+
+ @Override
+ public RequestStatus updateResources(Request request, Predicate predicate) throws AmbariException {
+ for (Map<PropertyId, Object> propertyMap : getPropertyMaps(request.getProperties().iterator().next(), predicate)) {
+ ClusterRequest clusterRequest = getRequest(propertyMap);
+ getManagementController().updateCluster(clusterRequest);
+ }
+ return getRequestStatus(null);
+ }
+
+ @Override
+ public RequestStatus deleteResources(Predicate predicate) throws AmbariException {
+ for (Map<PropertyId, Object> propertyMap : getPropertyMaps(null, predicate)) {
+ ClusterRequest clusterRequest = getRequest(propertyMap);
+ getManagementController().deleteCluster(clusterRequest);
+ }
+ return getRequestStatus(null);
+ }
+
+ // ----- utility methods -------------------------------------------------
+
+ @Override
+ protected Set<PropertyId> getPKPropertyIds() {
+ return pkPropertyIds;
+ }
+
+ /**
+ * Get a cluster request object from a map of property values.
+ *
+ * @param properties the predicate
+ *
+ * @return the cluster request object
+ */
+ private ClusterRequest getRequest(Map<PropertyId, Object> properties) {
+
+ Long id = (Long) properties.get(CLUSTER_ID_PROPERTY_ID);
+ String stackVersion = (String) properties.get(CLUSTER_VERSION_PROPERTY_ID);
+
+ return new ClusterRequest(
+ id == null ? null : id,
+ (String) properties.get(CLUSTER_NAME_PROPERTY_ID),
+ stackVersion == null ? "HDP-0.1" : stackVersion, // TODO : looks like version is required
+ /*properties.get(CLUSTER_HOSTS_PROPERTY_ID)*/ null);
+ }
+}
Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java?rev=1406494&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ComponentResourceProvider.java Wed Nov 7 08:32:11 2012
@@ -0,0 +1,159 @@
+/**
+ * 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.internal;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.ServiceComponentRequest;
+import org.apache.ambari.server.controller.ServiceComponentResponse;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.PropertyId;
+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.utilities.PropertyHelper;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Resource provider for component resources.
+ */
+class ComponentResourceProvider extends ResourceProviderImpl{
+
+ // ----- Property ID constants ---------------------------------------------
+
+ // Components
+ protected static final PropertyId COMPONENT_CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("cluster_name", "ServiceComponentInfo");
+ protected static final PropertyId COMPONENT_SERVICE_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("service_name", "ServiceComponentInfo");
+ protected static final PropertyId COMPONENT_COMPONENT_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("component_name", "ServiceComponentInfo");
+ protected static final PropertyId COMPONENT_STATE_PROPERTY_ID = PropertyHelper.getPropertyId("state", "ServiceComponentInfo");
+
+
+ private static Set<PropertyId> pkPropertyIds =
+ new HashSet<PropertyId>(Arrays.asList(new PropertyId[]{
+ COMPONENT_CLUSTER_NAME_PROPERTY_ID,
+ COMPONENT_SERVICE_NAME_PROPERTY_ID,
+ COMPONENT_COMPONENT_NAME_PROPERTY_ID}));
+
+ // ----- Constructors ----------------------------------------------------
+
+ /**
+ * Create a new resource provider for the given management controller.
+ *
+ * @param propertyIds the property ids
+ * @param keyPropertyIds the key property ids
+ * @param managementController the management controller
+ */
+ ComponentResourceProvider(Set<PropertyId> propertyIds,
+ Map<Resource.Type, PropertyId> keyPropertyIds,
+ AmbariManagementController managementController) {
+ super(propertyIds, keyPropertyIds, managementController);
+ }
+
+ // ----- ResourceProvider ------------------------------------------------
+
+ @Override
+ public RequestStatus createResources(Request request) throws AmbariException {
+ Set<ServiceComponentRequest> requests = new HashSet<ServiceComponentRequest>();
+ for (Map<PropertyId, Object> propertyMap : request.getProperties()) {
+ requests.add(getRequest(propertyMap));
+ }
+ getManagementController().createComponents(requests);
+ return getRequestStatus(null);
+ }
+
+ @Override
+ public Set<Resource> getResources(Request request, Predicate predicate) throws AmbariException {
+ Set<PropertyId> requestedIds = PropertyHelper.getRequestPropertyIds(getPropertyIds(), request, predicate);
+ ServiceComponentRequest serviceComponentRequest = getRequest(getProperties(predicate));
+
+ // TODO : handle multiple requests
+ Set<ServiceComponentResponse> responses = getManagementController().getComponents(Collections.singleton(serviceComponentRequest));
+
+ Set<Resource> resources = new HashSet<Resource>();
+ for (ServiceComponentResponse response : responses) {
+ Resource resource = new ResourceImpl(Resource.Type.Component);
+// setResourceProperty(resource, COMPONENT_CLUSTER_ID_PROPERTY_ID, response.getClusterId(), requestedIds);
+ setResourceProperty(resource, COMPONENT_CLUSTER_NAME_PROPERTY_ID, response.getClusterName(), requestedIds);
+ setResourceProperty(resource, COMPONENT_SERVICE_NAME_PROPERTY_ID, response.getServiceName(), requestedIds);
+ setResourceProperty(resource, COMPONENT_COMPONENT_NAME_PROPERTY_ID, response.getComponentName(), requestedIds);
+// setResourceProperty(resource, COMPONENT_VERSION_PROPERTY_ID, response.getCurrentStackVersion(), requestedIds);
+ resources.add(resource);
+ }
+ return resources;
+ }
+
+ @Override
+ public RequestStatus updateResources(Request request, Predicate predicate) throws AmbariException {
+ Set<ServiceComponentRequest> requests = new HashSet<ServiceComponentRequest>();
+ for (Map<PropertyId, Object> propertyMap : getPropertyMaps(request.getProperties().iterator().next(), predicate)) {
+ ServiceComponentRequest compRequest = getRequest(propertyMap);
+
+ Map<String, String> configMap = new HashMap<String,String>();
+
+ for (Map.Entry<PropertyId,Object> entry : propertyMap.entrySet()) {
+ if (entry.getKey().getCategory().equals("config")) {
+ configMap.put(entry.getKey().getName(), (String) entry.getValue());
+ }
+ }
+
+ if (0 != configMap.size())
+ compRequest.setConfigVersions(configMap);
+
+ requests.add(compRequest);
+ }
+ return getRequestStatus(getManagementController().updateComponents(requests));
+ }
+
+ @Override
+ public RequestStatus deleteResources(Predicate predicate) throws AmbariException {
+ Set<ServiceComponentRequest> requests = new HashSet<ServiceComponentRequest>();
+ for (Map<PropertyId, Object> propertyMap : getPropertyMaps(null, predicate)) {
+ requests.add(getRequest(propertyMap));
+ }
+ return getRequestStatus(getManagementController().deleteComponents(requests));
+ }
+
+ // ----- utility methods -------------------------------------------------
+
+ @Override
+ protected Set<PropertyId> getPKPropertyIds() {
+ return pkPropertyIds;
+ }
+
+ /**
+ * Get a component request object from a map of property values.
+ *
+ * @param properties the predicate
+ *
+ * @return the component request object
+ */
+ private ServiceComponentRequest getRequest(Map<PropertyId, Object> properties) {
+ return new ServiceComponentRequest(
+ (String) properties.get(COMPONENT_CLUSTER_NAME_PROPERTY_ID),
+ (String) properties.get(COMPONENT_SERVICE_NAME_PROPERTY_ID),
+ (String) properties.get(COMPONENT_COMPONENT_NAME_PROPERTY_ID),
+ null,
+ (String) properties.get(COMPONENT_STATE_PROPERTY_ID));
+ }
+}
Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigurationResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigurationResourceProvider.java?rev=1406494&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigurationResourceProvider.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigurationResourceProvider.java Wed Nov 7 08:32:11 2012
@@ -0,0 +1,132 @@
+package org.apache.ambari.server.controller.internal;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.ConfigurationRequest;
+import org.apache.ambari.server.controller.ConfigurationResponse;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.PropertyId;
+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.utilities.PropertyHelper;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Resource provider for configuration resources.
+ */
+class ConfigurationResourceProvider extends ResourceProviderImpl {
+
+ // ----- Property ID constants ---------------------------------------------
+
+ // Configurations (values are part of query strings and body post, so they don't have defined categories)
+ protected static final PropertyId CONFIGURATION_CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("cluster_name","Config");
+ protected static final PropertyId CONFIGURATION_CONFIG_TYPE_PROPERTY_ID = PropertyHelper.getPropertyId("type");
+ protected static final PropertyId CONFIGURATION_CONFIG_TAG_PROPERTY_ID = PropertyHelper.getPropertyId("tag");
+
+
+ private static Set<PropertyId> pkPropertyIds =
+ new HashSet<PropertyId>(Arrays.asList(new PropertyId[]{
+ CONFIGURATION_CLUSTER_NAME_PROPERTY_ID,
+ CONFIGURATION_CONFIG_TYPE_PROPERTY_ID}));
+
+ ConfigurationResourceProvider(Set<PropertyId> propertyIds,
+ Map<Resource.Type, PropertyId> keyPropertyIds,
+ AmbariManagementController managementController) {
+
+ super(propertyIds, keyPropertyIds, managementController);
+
+ }
+
+ @Override
+ public RequestStatus createResources(Request request) throws AmbariException {
+ for (Map<PropertyId, Object> map : request.getProperties()) {
+
+ String cluster = (String) map.get(CONFIGURATION_CLUSTER_NAME_PROPERTY_ID);
+ String type = (String) map.get(PropertyHelper.getPropertyId("type", ""));
+ String tag = (String) map.get(PropertyHelper.getPropertyId("tag", ""));
+ Map<String, String> configMap = new HashMap<String, String>();
+
+ Iterator<Map.Entry<PropertyId, Object>> it1 = map.entrySet().iterator();
+ while (it1.hasNext()) {
+ Map.Entry<PropertyId, Object> entry = it1.next();
+ if (entry.getKey().getCategory().equals("properties") && null != entry.getValue()) {
+ configMap.put(entry.getKey().getName(), entry.getValue().toString());
+ }
+ }
+
+ ConfigurationRequest configRequest = new ConfigurationRequest(cluster, type, tag, configMap);
+
+ getManagementController().createConfiguration(configRequest);
+ }
+ return getRequestStatus(null);
+ }
+
+ @Override
+ public Set<Resource> getResources(Request request, Predicate predicate)
+ throws AmbariException {
+
+ ConfigurationRequest configRequest = getRequest(getProperties(predicate));
+
+ // TODO : handle multiple requests
+ Set<ConfigurationResponse> responses = getManagementController().getConfigurations(Collections.singleton(configRequest));
+
+ Set<Resource> resources = new HashSet<Resource>();
+ for (ConfigurationResponse response : responses) {
+ Resource resource = new ResourceImpl(Resource.Type.Configuration);
+ resource.setProperty(CONFIGURATION_CLUSTER_NAME_PROPERTY_ID, response.getClusterName());
+ resource.setProperty(CONFIGURATION_CONFIG_TYPE_PROPERTY_ID, response.getType());
+ resource.setProperty(CONFIGURATION_CONFIG_TAG_PROPERTY_ID, response.getVersionTag());
+ if (null != response.getConfigs() && response.getConfigs().size() > 0) {
+ Map<String, String> configs = response.getConfigs();
+
+ for (Map.Entry<String, String> entry : configs.entrySet()) {
+ PropertyId id = PropertyHelper.getPropertyId(entry.getKey(), "properties");
+ resource.setProperty(id, entry.getValue());
+ }
+ }
+
+ resources.add(resource);
+ }
+ return resources;
+ }
+
+ /**
+ * Throws an exception, as Configurations cannot be updated.
+ */
+ @Override
+ public RequestStatus updateResources(Request request, Predicate predicate)
+ throws AmbariException {
+ throw new AmbariException ("Cannot update a Configuration resource.");
+ }
+
+ /**
+ * Throws an exception, as Configurations cannot be deleted.
+ */
+ @Override
+ public RequestStatus deleteResources(Predicate predicate) throws AmbariException {
+ throw new AmbariException ("Cannot delete a Configuration resource.");
+ }
+
+ @Override
+ protected Set<PropertyId> getPKPropertyIds() {
+ return pkPropertyIds;
+ }
+
+ private ConfigurationRequest getRequest(Map<PropertyId, Object> properties) {
+ String type = (String) properties.get(CONFIGURATION_CONFIG_TYPE_PROPERTY_ID);
+
+ String tag = (String) properties.get(CONFIGURATION_CONFIG_TAG_PROPERTY_ID);
+
+ return new ConfigurationRequest(
+ (String) properties.get(CONFIGURATION_CLUSTER_NAME_PROPERTY_ID),
+ type, tag, new HashMap<String, String>());
+ }
+}
Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java?rev=1406494&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java Wed Nov 7 08:32:11 2012
@@ -0,0 +1,162 @@
+/**
+ * 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.internal;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.ServiceComponentHostRequest;
+import org.apache.ambari.server.controller.ServiceComponentHostResponse;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.PropertyId;
+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.utilities.PropertyHelper;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Resource provider for host component resources.
+ */
+class HostComponentResourceProvider extends ResourceProviderImpl{
+
+ // ----- Property ID constants ---------------------------------------------
+
+ // Host Components
+ protected static final PropertyId HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("cluster_name", "HostRoles");
+ protected static final PropertyId HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("service_name", "HostRoles");
+ protected static final PropertyId HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("component_name", "HostRoles");
+ protected static final PropertyId HOST_COMPONENT_HOST_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("host_name", "HostRoles");
+ protected static final PropertyId HOST_COMPONENT_STATE_PROPERTY_ID = PropertyHelper.getPropertyId("state", "HostRoles");
+
+ private static Set<PropertyId> pkPropertyIds =
+ new HashSet<PropertyId>(Arrays.asList(new PropertyId[]{
+ HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID,
+ HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID,
+ HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID,
+ HOST_COMPONENT_HOST_NAME_PROPERTY_ID}));
+
+ // ----- Constructors ----------------------------------------------------
+
+ /**
+ * Create a new resource provider for the given management controller.
+ *
+ * @param propertyIds the property ids
+ * @param keyPropertyIds the key property ids
+ * @param managementController the management controller
+ */
+ HostComponentResourceProvider(Set<PropertyId> propertyIds,
+ Map<Resource.Type, PropertyId> keyPropertyIds,
+ AmbariManagementController managementController) {
+ super(propertyIds, keyPropertyIds, managementController);
+ }
+
+ // ----- ResourceProvider ------------------------------------------------
+
+ @Override
+ public RequestStatus createResources(Request request) throws AmbariException {
+ Set<ServiceComponentHostRequest> requests = new HashSet<ServiceComponentHostRequest>();
+ for (Map<PropertyId, Object> propertyMap : request.getProperties()) {
+ requests.add(getRequest(propertyMap));
+ }
+ getManagementController().createHostComponents(requests);
+ return getRequestStatus(null);
+ }
+
+ @Override
+ public Set<Resource> getResources(Request request, Predicate predicate) throws AmbariException {
+ Set<PropertyId> requestedIds = PropertyHelper.getRequestPropertyIds(getPropertyIds(), request, predicate);
+ ServiceComponentHostRequest hostComponentRequest = getRequest(getProperties(predicate));
+
+ // TODO : handle multiple requests
+ Set<ServiceComponentHostResponse> responses = getManagementController().getHostComponents(Collections.singleton(hostComponentRequest));
+
+ Set<Resource> resources = new HashSet<Resource>();
+ for (ServiceComponentHostResponse response : responses) {
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+ setResourceProperty(resource, HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID, response.getClusterName(), requestedIds);
+ setResourceProperty(resource, HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID, response.getServiceName(), requestedIds);
+ setResourceProperty(resource, HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, response.getComponentName(), requestedIds);
+ setResourceProperty(resource, HOST_COMPONENT_HOST_NAME_PROPERTY_ID, response.getHostname(), requestedIds);
+ setResourceProperty(resource, HOST_COMPONENT_STATE_PROPERTY_ID, response.getLiveState(), requestedIds);
+ resources.add(resource);
+ }
+ return resources;
+ }
+
+ @Override
+ public RequestStatus updateResources(Request request, Predicate predicate) throws AmbariException {
+ Set<ServiceComponentHostRequest> requests = new HashSet<ServiceComponentHostRequest>();
+ for (Map<PropertyId, Object> propertyMap : getPropertyMaps(request.getProperties().iterator().next(), predicate)) {
+
+ ServiceComponentHostRequest hostCompRequest = getRequest(propertyMap);
+
+ Map<String, String> configMap = new HashMap<String,String>();
+
+ for (Map.Entry<PropertyId,Object> entry : propertyMap.entrySet()) {
+ if (entry.getKey().getCategory().equals("config")) {
+ configMap.put(entry.getKey().getName(), (String) entry.getValue());
+ }
+ }
+
+ if (0 != configMap.size())
+ hostCompRequest.setConfigVersions(configMap);
+
+ requests.add(hostCompRequest);
+ }
+ return getRequestStatus(getManagementController().updateHostComponents(requests));
+ }
+
+ @Override
+ public RequestStatus deleteResources(Predicate predicate) throws AmbariException {
+ Set<ServiceComponentHostRequest> requests = new HashSet<ServiceComponentHostRequest>();
+ for (Map<PropertyId, Object> propertyMap : getPropertyMaps(null, predicate)) {
+ requests.add(getRequest(propertyMap));
+ }
+ return getRequestStatus(getManagementController().deleteHostComponents(requests));
+ }
+
+ // ----- utility methods -------------------------------------------------
+
+ @Override
+ protected Set<PropertyId> getPKPropertyIds() {
+ return pkPropertyIds;
+ }
+
+ /**
+ * Get a component request object from a map of property values.
+ *
+ * @param properties the predicate
+ *
+ * @return the component request object
+ */
+ private ServiceComponentHostRequest getRequest(Map<PropertyId, Object> properties) {
+ return new ServiceComponentHostRequest(
+ (String) properties.get(HOST_COMPONENT_CLUSTER_NAME_PROPERTY_ID),
+ (String) properties.get(HOST_COMPONENT_SERVICE_NAME_PROPERTY_ID),
+ (String) properties.get(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID),
+ (String) properties.get(HOST_COMPONENT_HOST_NAME_PROPERTY_ID),
+ null,
+ (String) properties.get(HOST_COMPONENT_STATE_PROPERTY_ID));
+ }
+}
Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java?rev=1406494&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java Wed Nov 7 08:32:11 2012
@@ -0,0 +1,160 @@
+/**
+ * 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.internal;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.HostRequest;
+import org.apache.ambari.server.controller.HostResponse;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.PropertyId;
+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.utilities.PropertyHelper;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Resource provider for host resources.
+ */
+class HostResourceProvider extends ResourceProviderImpl{
+
+ // ----- Property ID constants ---------------------------------------------
+
+ // Hosts
+ protected static final PropertyId HOST_CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("cluster_name", "Hosts");
+ protected static final PropertyId HOST_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("host_name", "Hosts");
+ protected static final PropertyId HOST_IP_PROPERTY_ID = PropertyHelper.getPropertyId("ip", "Hosts");
+ protected static final PropertyId HOST_TOTAL_MEM_PROPERTY_ID = PropertyHelper.getPropertyId("total_mem", "Hosts");
+ protected static final PropertyId HOST_CPU_COUNT_PROPERTY_ID = PropertyHelper.getPropertyId("cpu_count", "Hosts");
+ protected static final PropertyId HOST_OS_ARCH_PROPERTY_ID = PropertyHelper.getPropertyId("os_arch", "Hosts");
+ protected static final PropertyId HOST_OS_TYPE_PROPERTY_ID = PropertyHelper.getPropertyId("os_type", "Hosts");
+
+ private static Set<PropertyId> pkPropertyIds =
+ new HashSet<PropertyId>(Arrays.asList(new PropertyId[]{
+ HOST_NAME_PROPERTY_ID}));
+
+ // ----- Constructors ----------------------------------------------------
+
+ /**
+ * Create a new resource provider for the given management controller.
+ *
+ * @param propertyIds the property ids
+ * @param keyPropertyIds the key property ids
+ * @param managementController the management controller
+ */
+ HostResourceProvider(Set<PropertyId> propertyIds,
+ Map<Resource.Type, PropertyId> keyPropertyIds,
+ AmbariManagementController managementController) {
+ super(propertyIds, keyPropertyIds, managementController);
+ }
+
+ // ----- ResourceProvider ------------------------------------------------
+
+ @Override
+ public RequestStatus createResources(Request request) throws AmbariException {
+ Set<HostRequest> requests = new HashSet<HostRequest>();
+ for (Map<PropertyId, Object> propertyMap : request.getProperties()) {
+ requests.add(getRequest(propertyMap));
+ }
+ getManagementController().createHosts(requests);
+ return getRequestStatus(null);
+ }
+
+ @Override
+ public Set<Resource> getResources(Request request, Predicate predicate) throws AmbariException {
+ Set<PropertyId> requestedIds = PropertyHelper.getRequestPropertyIds(getPropertyIds(), request, predicate);
+ HostRequest hostRequest = getRequest(getProperties(predicate));
+
+ // TODO : handle multiple requests
+ Set<HostResponse> responses = getManagementController().getHosts(Collections.singleton(hostRequest));
+
+ Set<Resource> resources = new HashSet<Resource>();
+ for (HostResponse response : responses) {
+ Resource resource = new ResourceImpl(Resource.Type.Host);
+
+ // TODO : properly handle more than one cluster
+ if (null != hostRequest.getClusterNames()) {
+ for (String clusterName : hostRequest.getClusterNames()) {
+ if (response.getClusterNames().contains(clusterName)) {
+ setResourceProperty(resource, HOST_CLUSTER_NAME_PROPERTY_ID, clusterName, requestedIds);
+ }
+ }
+ }
+
+ setResourceProperty(resource, HOST_NAME_PROPERTY_ID, response.getHostname(), requestedIds);
+ setResourceProperty(resource, HOST_IP_PROPERTY_ID, response.getIpv4(), requestedIds);
+ setResourceProperty(resource, HOST_TOTAL_MEM_PROPERTY_ID, Long.valueOf(response.getTotalMemBytes()), requestedIds);
+ setResourceProperty(resource, HOST_CPU_COUNT_PROPERTY_ID, Long.valueOf(response.getCpuCount()), requestedIds);
+ setResourceProperty(resource, HOST_OS_ARCH_PROPERTY_ID, response.getOsArch(), requestedIds);
+ setResourceProperty(resource, HOST_OS_TYPE_PROPERTY_ID, response.getOsType(), requestedIds);
+ // TODO ...
+ resources.add(resource);
+ }
+ return resources;
+ }
+
+ @Override
+ public RequestStatus updateResources(Request request, Predicate predicate) throws AmbariException {
+ Set<HostRequest> requests = new HashSet<HostRequest>();
+ for (Map<PropertyId, Object> propertyMap : getPropertyMaps(request.getProperties().iterator().next(), predicate)) {
+ requests.add(getRequest(propertyMap));
+ }
+ getManagementController().updateHosts(requests);
+ return getRequestStatus(null);
+ }
+
+ @Override
+ public RequestStatus deleteResources(Predicate predicate) throws AmbariException {
+ Set<HostRequest> requests = new HashSet<HostRequest>();
+ for (Map<PropertyId, Object> propertyMap : getPropertyMaps(null, predicate)) {
+ requests.add(getRequest(propertyMap));
+ }
+ getManagementController().deleteHosts(requests);
+ return getRequestStatus(null);
+ }
+
+ // ----- utility methods -------------------------------------------------
+
+ @Override
+ protected Set<PropertyId> getPKPropertyIds() {
+ return pkPropertyIds;
+ }
+
+ /**
+ * Get a component request object from a map of property values.
+ *
+ * @param properties the predicate
+ *
+ * @return the component request object
+ */
+ private HostRequest getRequest(Map<PropertyId, Object> properties) {
+ return new HostRequest(
+ (String) properties.get(HOST_NAME_PROPERTY_ID),
+ // TODO : more than one cluster
+ properties.containsKey(HOST_CLUSTER_NAME_PROPERTY_ID) ?
+ Collections.singletonList((String) properties.get(HOST_CLUSTER_NAME_PROPERTY_ID)) :
+ Collections.<String>emptyList(),
+ null);
+ }
+}
Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java?rev=1406494&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RequestResourceProvider.java Wed Nov 7 08:32:11 2012
@@ -0,0 +1,125 @@
+/**
+ * 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.internal;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.RequestStatusRequest;
+import org.apache.ambari.server.controller.RequestStatusResponse;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.PropertyId;
+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.utilities.PropertyHelper;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Resource provider for request resources.
+ */
+class RequestResourceProvider extends ResourceProviderImpl{
+
+ // ----- Property ID constants ---------------------------------------------
+ // Requests
+ protected static final PropertyId REQUEST_CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("cluster_name","Requests");
+ protected static final PropertyId REQUEST_ID_PROPERTY_ID = PropertyHelper.getPropertyId("id","Requests");
+
+
+ private static Set<PropertyId> pkPropertyIds =
+ new HashSet<PropertyId>(Arrays.asList(new PropertyId[]{
+ REQUEST_ID_PROPERTY_ID}));
+
+ // ----- Constructors ----------------------------------------------------
+
+ /**
+ * Create a new resource provider for the given management controller.
+ *
+ * @param propertyIds the property ids
+ * @param keyPropertyIds the key property ids
+ * @param managementController the management controller
+ */
+ RequestResourceProvider(Set<PropertyId> propertyIds,
+ Map<Resource.Type, PropertyId> keyPropertyIds,
+ AmbariManagementController managementController) {
+ super(propertyIds, keyPropertyIds, managementController);
+ }
+
+ // ----- ResourceProvider ------------------------------------------------
+
+ @Override
+ public RequestStatus createResources(Request request) throws AmbariException {
+ throw new UnsupportedOperationException("Not currently supported.");
+ }
+
+ @Override
+ public Set<Resource> getResources(Request request, Predicate predicate) throws AmbariException {
+ Set<PropertyId> requestedIds = PropertyHelper.getRequestPropertyIds(getPropertyIds(), request, predicate);
+ Map<PropertyId, Object> predicateProperties = getProperties(predicate);
+ RequestStatusRequest requestStatusRequest = getRequest(predicateProperties);
+
+ String clusterName = (String) predicateProperties.get(REQUEST_CLUSTER_NAME_PROPERTY_ID);
+
+ Set<RequestStatusResponse> responses = getManagementController()
+ .getRequestStatus(requestStatusRequest);
+ Set<Resource> resources = new HashSet<Resource>();
+ for (RequestStatusResponse response : responses) {
+ Resource resource = new ResourceImpl(Resource.Type.Request);
+ setResourceProperty(resource, REQUEST_CLUSTER_NAME_PROPERTY_ID, clusterName, requestedIds);
+ setResourceProperty(resource, REQUEST_ID_PROPERTY_ID, response.getRequestId(), requestedIds);
+ resources.add(resource);
+ }
+ return resources;
+ }
+
+ @Override
+ public RequestStatus updateResources(Request request, Predicate predicate) throws AmbariException {
+ throw new UnsupportedOperationException("Not currently supported.");
+ }
+
+ @Override
+ public RequestStatus deleteResources(Predicate predicate) throws AmbariException {
+ throw new UnsupportedOperationException("Not currently supported.");
+ }
+
+ // ----- utility methods -------------------------------------------------
+
+ @Override
+ protected Set<PropertyId> getPKPropertyIds() {
+ return pkPropertyIds;
+ }
+
+ /**
+ * Get a component request object from a map of property values.
+ *
+ * @param properties the predicate
+ *
+ * @return the component request object
+ */
+ private RequestStatusRequest getRequest(Map<PropertyId, Object> properties) {
+ Long requestId = null;
+ if (properties.get(REQUEST_ID_PROPERTY_ID) != null) {
+ requestId = Long.valueOf((String) properties
+ .get(REQUEST_ID_PROPERTY_ID));
+ }
+ return new RequestStatusRequest(requestId);
+ }
+}