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/10/16 08:38:26 UTC
svn commit: r1398669 [4/5] - in /incubator/ambari/branches/AMBARI-666: ./
ambari-project/ ambari-server/
ambari-server/src/main/java/org/apache/ambari/server/actionmanager/
ambari-server/src/main/java/org/apache/ambari/server/agent/
ambari-server/src/m...
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java Tue Oct 16 06:38:23 2012
@@ -26,17 +26,25 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.Singleton;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ClusterNotFoundException;
import org.apache.ambari.server.HostNotFoundException;
+import org.apache.ambari.server.orm.dao.ClusterDAO;
+import org.apache.ambari.server.orm.dao.HostDAO;
+import org.apache.ambari.server.orm.entities.ClusterEntity;
+import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Host;
+import org.apache.ambari.server.state.host.HostFactory;
import org.apache.ambari.server.state.host.HostImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.google.inject.Singleton;
+import javax.persistence.RollbackException;
@Singleton
public class ClustersImpl implements Clusters {
@@ -49,7 +57,21 @@ public class ClustersImpl implements Clu
private Map<String, Host> hosts;
private Map<String, Set<Cluster>> hostClusterMap;
- public ClustersImpl() {
+ private Injector injector;
+ private ClusterDAO clusterDAO;
+ private HostDAO hostDAO;
+ private ClusterFactory clusterFactory;
+ private HostFactory hostFactory;
+
+ @Inject
+ public ClustersImpl(Injector injector) {
+ this.injector = injector;
+
+ this.clusterDAO = injector.getInstance(ClusterDAO.class);
+ this.hostDAO = injector.getInstance(HostDAO.class);
+ this.clusterFactory = injector.getInstance(ClusterFactory.class);
+ this.hostFactory = injector.getInstance(HostFactory.class);
+
clusters = new HashMap<String, Cluster>();
clustersById = new HashMap<Long, Cluster>();
hosts = new HashMap<String, Host>();
@@ -64,17 +86,21 @@ public class ClustersImpl implements Clu
throw new AmbariException("Duplicate entry for Cluster"
+ ", clusterName= " + clusterName);
}
- // TODO persist cluster into DB
+
// retrieve new cluster id
// add cluster id -> cluster mapping into clustersById
- long clusterId = clusterName.hashCode();
- Cluster impl = new ClusterImpl(this, clusterId, clusterName);
- clusters.put(clusterName, impl);
- clustersById.put(clusterId, impl);
- if (LOG.isDebugEnabled()) {
- LOG.debug("Adding a new cluster"
- + ", clusterName=" + clusterName
- + ", clusterId=" + clusterId);
+ ClusterEntity clusterEntity = new ClusterEntity();
+ clusterEntity.setClusterName(clusterName);
+ try {
+ clusterDAO.create(clusterEntity);
+ clusterEntity = clusterDAO.merge(clusterEntity);
+ Cluster cluster = clusterFactory.create(clusterEntity);
+
+ clusters.put(clusterName, cluster);
+ clustersById.put(cluster.getClusterId(), cluster);
+ } catch (RollbackException e) {
+ LOG.warn("Unable to create cluster " + clusterName, e);
+ throw new AmbariException("Unable to create cluster " + clusterName, e);
}
}
@@ -82,21 +108,54 @@ public class ClustersImpl implements Clu
public synchronized Cluster getCluster(String clusterName)
throws AmbariException {
if (!clusters.containsKey(clusterName)) {
- throw new ClusterNotFoundException(clusterName);
+ ClusterEntity clusterEntity = clusterDAO.findByName(clusterName);
+ if (clusterEntity != null) {
+ return getClusterById(clusterEntity.getClusterId());
+ } else {
+ throw new ClusterNotFoundException(clusterName);
+ }
}
return clusters.get(clusterName);
}
@Override
+ public synchronized Cluster getClusterById(long id) throws AmbariException {
+ if (!clustersById.containsKey(id)) {
+ ClusterEntity clusterEntity = clusterDAO.findById(id);
+ if (clusterEntity != null) {
+ Cluster cluster = clusterFactory.create(clusterEntity);
+ clustersById.put(cluster.getClusterId(), cluster);
+ clusters.put(clusterEntity.getClusterName(), cluster);
+ } else {
+ throw new ClusterNotFoundException("clusterID=" + id);
+ }
+ }
+ return clustersById.get(id);
+ }
+
+ @Override
public synchronized List<Host> getHosts() {
- return new ArrayList<Host>(hosts.values());
+ List<Host> hostList = new ArrayList<Host>(hosts.size());
+ hostList.addAll(hosts.values());
+
+ for (HostEntity hostEntity : hostDAO.findAll()) {
+ if (!hosts.containsKey(hostEntity.getHostName())) {
+ try {
+ hostList.add(getHost(hostEntity.getHostName()));
+ } catch (AmbariException ignored) {
+ LOG.error("Database externally modified?");
+ }
+ }
+ }
+
+ return hostList;
}
@Override
public synchronized Set<Cluster> getClustersForHost(String hostname)
throws AmbariException {
if (!hostClusterMap.containsKey(hostname)) {
- throw new HostNotFoundException(hostname);
+ getHost(hostname);
}
return Collections.unmodifiableSet(hostClusterMap.get(hostname));
}
@@ -104,7 +163,24 @@ public class ClustersImpl implements Clu
@Override
public synchronized Host getHost(String hostname) throws AmbariException {
if (!hosts.containsKey(hostname)) {
- throw new HostNotFoundException(hostname);
+ HostEntity hostEntity = hostDAO.findByName(hostname);
+ if (hostEntity != null) {
+ Host host = hostFactory.create(hostEntity, true);
+
+ Set<Cluster> cSet = new HashSet<Cluster>();
+ for (ClusterEntity clusterEntity : hostEntity.getClusterEntities()) {
+ if (clustersById.containsKey(clusterEntity.getClusterId())) {
+ cSet.add(clustersById.get(clusterEntity.getClusterId()));
+ } else {
+ cSet.add(getClusterById(clusterEntity.getClusterId()));
+ }
+ }
+
+ hosts.put(hostname, host);
+ hostClusterMap.put(hostname, cSet);
+ } else {
+ throw new HostNotFoundException(hostname);
+ }
}
return hosts.get(hostname);
}
@@ -115,7 +191,13 @@ public class ClustersImpl implements Clu
throw new AmbariException("Duplicate entry for Host"
+ ", hostName= " + hostname);
}
- hosts.put(hostname, new HostImpl(hostname));
+ HostEntity hostEntity = new HostEntity();
+ hostEntity.setHostName(hostname);
+ hostEntity.setClusterEntities(new ArrayList<ClusterEntity>());
+ //not stored to DB
+ Host host = hostFactory.create(hostEntity, false);
+
+ hosts.put(hostname, host);
hostClusterMap.put(hostname, new HashSet<Cluster>());
if (LOG.isDebugEnabled()) {
LOG.debug("Adding a host to Clusters"
@@ -125,44 +207,53 @@ public class ClustersImpl implements Clu
@Override
public synchronized void mapHostToCluster(String hostname,
- String clusterName) throws AmbariException {
- Cluster c = getCluster(clusterName);
- getHost(hostname);
+ String clusterName) throws AmbariException {
+ ClusterImpl cluster = (ClusterImpl) getCluster(clusterName);
+ HostImpl host = (HostImpl) getHost(hostname);
+
if (!hostClusterMap.containsKey(hostname)) {
throw new HostNotFoundException(hostname);
}
- hostClusterMap.get(hostname).add(c);
+
+ host.addToCluster(cluster);
+
+ hostClusterMap.get(hostname).add(cluster);
if (LOG.isDebugEnabled()) {
LOG.debug("Mapping a host to a cluster"
+ ", clusterName=" + clusterName
- + ", clusterId=" + c.getClusterId()
+ + ", clusterId=" + cluster.getClusterId()
+ ", hostname=" + hostname);
}
}
@Override
public synchronized Map<String, Cluster> getClusters() {
+ for (ClusterEntity clusterEntity : clusterDAO.findAll()) {
+ try {
+ if (!clustersById.containsKey(clusterEntity.getClusterId())) {
+ getClusterById(clusterEntity.getClusterId());
+ }
+ } catch (AmbariException ignored) {
+
+ }
+ }
return Collections.unmodifiableMap(clusters);
}
@Override
public synchronized void mapHostsToCluster(Set<String> hostnames,
- String clusterName) throws AmbariException {
- Cluster c = getCluster(clusterName);
+ String clusterName) throws AmbariException {
for (String hostname : hostnames) {
- if (!hostClusterMap.containsKey(hostname)) {
- throw new HostNotFoundException(hostname);
- }
- hostClusterMap.get(hostname).add(c);
- if (LOG.isDebugEnabled()) {
- LOG.debug("Mapping a host to a cluster"
- + ", clusterName=" + clusterName
- + ", clusterId=" + c.getClusterId()
- + ", hostname=" + hostname);
- }
+ mapHostToCluster(hostname, clusterName);
}
}
+ @Override
+ public synchronized void updateClusterName(String oldName, String newName) {
+ clusters.put(newName, clusters.remove(oldName));
+ }
+
+
public void debugDump(StringBuilder sb) {
sb.append("Clusters=[ ");
boolean first = true;
Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostFactory.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostFactory.java?rev=1398669&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostFactory.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostFactory.java Tue Oct 16 06:38:23 2012
@@ -0,0 +1,25 @@
+/**
+ * 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.state.host;
+
+import org.apache.ambari.server.orm.entities.HostEntity;
+import org.apache.ambari.server.state.Host;
+
+public interface HostFactory {
+ Host create(HostEntity hostEntity, boolean persisted);
+}
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/host/HostImpl.java Tue Oct 16 06:38:23 2012
@@ -19,119 +19,58 @@
package org.apache.ambari.server.state.host;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.lang.reflect.Type;
+import java.util.*;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.assistedinject.Assisted;
+import com.google.inject.persist.Transactional;
+import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.agent.DiskInfo;
import org.apache.ambari.server.agent.HostInfo;
import org.apache.ambari.server.controller.HostResponse;
-import org.apache.ambari.server.state.AgentVersion;
-import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.HostEvent;
-import org.apache.ambari.server.state.HostEventType;
-import org.apache.ambari.server.state.HostHealthStatus;
-import org.apache.ambari.server.state.HostState;
+import org.apache.ambari.server.orm.dao.ClusterDAO;
+import org.apache.ambari.server.orm.dao.HostStateDAO;
+import org.apache.ambari.server.orm.entities.ClusterEntity;
+import org.apache.ambari.server.orm.entities.HostStateEntity;
+import org.apache.ambari.server.state.*;
import org.apache.ambari.server.state.HostHealthStatus.HealthStatus;
import org.apache.ambari.server.state.fsm.InvalidStateTransitonException;
import org.apache.ambari.server.state.fsm.SingleArcTransition;
import org.apache.ambari.server.state.fsm.StateMachine;
import org.apache.ambari.server.state.fsm.StateMachineFactory;
import org.apache.ambari.server.state.job.Job;
+import org.apache.ambari.server.orm.dao.HostDAO;
+import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class HostImpl implements Host {
private static final Log LOG = LogFactory.getLog(HostImpl.class);
+ private final Gson gson;
+
+ private static final Type diskInfoType = new TypeToken<List<DiskInfo>>() {}.getType();
+ private static final Type hostAttributesType = new TypeToken<Map<String, String>>() {}.getType();
private final Lock readLock;
private final Lock writeLock;
- /**
- * Host hostname
- */
- private String hostName;
-
- /**
- * Host IP if ipv4 interface available
- */
- private String ipv4;
-
- /**
- * Host IP if ipv6 interface available
- */
- private String ipv6;
-
- /**
- * Count of cores on Host
- */
- private int cpuCount;
-
- /**
- * Os Architecture
- */
- private String osArch;
-
- /**
- * OS Type
- */
- private String osType;
-
- /**
- * OS Information
- */
- private String osInfo;
-
- /**
- * Amount of available memory for the Host
- */
- private long availableMemBytes;
-
- /**
- * Amount of physical memory for the Host
- */
- private long totalMemBytes;
-
- /**
- * Disks mounted on the Host
- */
- private List<DiskInfo> disksInfo;
+ private HostEntity hostEntity;
+ private HostStateEntity hostStateEntity;
+ private Injector injector;
+ private HostDAO hostDAO;
+ private HostStateDAO hostStateDAO;
+ private ClusterDAO clusterDAO;
+ private Clusters clusters;
- /**
- * Last heartbeat timestamp from the Host
- */
- private long lastHeartbeatTime;
-
- /**
- * Last registration timestamp for the Host
- */
- private long lastRegistrationTime;
-
- /**
- * Rack to which the Host belongs to
- */
- private String rackInfo;
-
- /**
- * Additional Host attributes
- */
- private Map<String, String> hostAttributes;
-
- /**
- * Version of agent running on the Host
- */
- private AgentVersion agentVersion;
-
- /**
- * Host Health Status
- */
- private HostHealthStatus healthStatus;
+ private boolean persisted = false;
private static final StateMachineFactory
<HostImpl, HostState, HostEventType, HostEvent>
@@ -212,30 +151,47 @@ public class HostImpl implements Host {
private final StateMachine<HostState, HostEventType, HostEvent> stateMachine;
- public HostImpl(String hostName) {
- super();
- this.hostName = hostName;
+ @Inject
+ public HostImpl(@Assisted HostEntity hostEntity, @Assisted boolean persisted, Injector injector) {
this.stateMachine = stateMachineFactory.make(this);
ReadWriteLock rwLock = new ReentrantReadWriteLock();
this.readLock = rwLock.readLock();
this.writeLock = rwLock.writeLock();
- this.healthStatus = new HostHealthStatus(HealthStatus.UNKNOWN, "");
- this.ipv4 = "";
- this.ipv6 = "";
- this.cpuCount = 0;
- this.osArch = "";
- this.osType = "";
- this.osInfo = "";
- this.availableMemBytes = 0;
- this.totalMemBytes = 0;
- this.disksInfo = new ArrayList<DiskInfo>();
- this.lastHeartbeatTime = 0;
- this.lastRegistrationTime = 0;
- this.rackInfo = "";
- this.hostAttributes = new HashMap<String, String>();
- this.agentVersion = new AgentVersion("");
+
+ this.hostEntity = hostEntity;
+ this.injector = injector;
+ this.persisted = persisted;
+ this.hostDAO = injector.getInstance(HostDAO.class);
+ this.hostStateDAO = injector.getInstance(HostStateDAO.class);
+ this.gson = injector.getInstance(Gson.class);
+ this.clusterDAO = injector.getInstance(ClusterDAO.class);
+ this.clusters = injector.getInstance(Clusters.class);
+
+ hostStateEntity = hostEntity.getHostStateEntity();
+ if (hostStateEntity == null) {
+ hostStateEntity = new HostStateEntity();
+ hostStateEntity.setHostEntity(hostEntity);
+ hostEntity.setHostStateEntity(hostStateEntity);
+ setHealthStatus(new HostHealthStatus(HealthStatus.UNKNOWN, ""));
+ if (persisted) {
+ persist();
+ }
+ } else {
+ this.stateMachine.setCurrentState(hostStateEntity.getCurrentState());
+ }
+
}
+// //TODO remove
+// public HostImpl(String hostname) {
+// this.stateMachine = stateMachineFactory.make(this);
+// ReadWriteLock rwLock = new ReentrantReadWriteLock();
+// this.readLock = rwLock.readLock();
+// this.writeLock = rwLock.writeLock();
+// setHostName(hostname);
+// setHealthStatus(new HostHealthStatus(HealthStatus.UNKNOWN, ""));
+// }
+
static class HostRegistrationReceived
implements SingleArcTransition<HostImpl, HostEvent> {
@@ -258,7 +214,7 @@ public class HostImpl implements Host {
LOG.debug("Host transition to host status updates received state"
+ ", host=" + e.getHostName()
+ ", heartbeatTime=" + e.getTimestamp());
- host.getHealthStatus().setHealthStatus(HealthStatus.HEALTHY);
+ host.setHealthStatus(new HostHealthStatus(HealthStatus.HEALTHY, host.getHealthStatus().getHealthReport()));
}
}
@@ -296,9 +252,9 @@ public class HostImpl implements Host {
host.setLastHeartbeatTime(e.getHeartbeatTime());
// TODO Audit logs
LOG.debug("Host transitioned to a healthy state"
- + ", host=" + e.getHostName()
- + ", heartbeatTime=" + e.getHeartbeatTime());
- host.getHealthStatus().setHealthStatus(HealthStatus.HEALTHY);
+ + ", host=" + e.getHostName()
+ + ", heartbeatTime=" + e.getHeartbeatTime());
+ host.setHealthStatus(new HostHealthStatus(HealthStatus.HEALTHY, host.getHealthStatus().getHealthReport()));
}
}
@@ -328,20 +284,24 @@ public class HostImpl implements Host {
LOG.debug("Host transitioned to heartbeat lost state"
+ ", host=" + e.getHostName()
+ ", lastHeartbeatTime=" + host.getLastHeartbeatTime());
- host.getHealthStatus().setHealthStatus(HealthStatus.UNKNOWN);
+ host.setHealthStatus(new HostHealthStatus(HealthStatus.UNKNOWN, host.getHealthStatus().getHealthReport()));
}
}
- void importHostInfo(HostInfo hostInfo) {
+ @Override
+ public void importHostInfo(HostInfo hostInfo) {
try {
writeLock.lock();
- this.hostName = hostInfo.getHostName();
- this.availableMemBytes = hostInfo.getFreeMemory();
- this.totalMemBytes = hostInfo.getMemoryTotal();
- this.cpuCount = hostInfo.getProcessorCount();
- this.osArch = hostInfo.getArchitecture();
- this.osType = hostInfo.getOS();
- this.disksInfo = hostInfo.getMounts();
+ persisted = false;
+ setHostName(hostInfo.getHostName());
+ setCpuCount(hostInfo.getProcessorCount());
+ setTotalMemBytes(hostInfo.getMemoryTotal());
+ setOsArch(hostInfo.getArchitecture());
+ setOsType(hostInfo.getOS());
+ setDisksInfo(hostInfo.getMounts());
+ setAvailableMemBytes(hostInfo.getFreeMemory());
+
+ saveIfPersisted();
}
finally {
writeLock.unlock();
@@ -364,6 +324,8 @@ public class HostImpl implements Host {
try {
writeLock.lock();
stateMachine.setCurrentState(state);
+ hostStateEntity.setCurrentState(state);
+ saveIfPersisted();
}
finally {
writeLock.unlock();
@@ -410,9 +372,8 @@ public class HostImpl implements Host {
public String getHostName() {
try {
readLock.lock();
- return hostName;
- }
- finally {
+ return hostEntity.getHostName();
+ } finally {
readLock.unlock();
}
}
@@ -421,9 +382,12 @@ public class HostImpl implements Host {
public void setHostName(String hostName) {
try {
writeLock.lock();
- this.hostName = hostName;
- }
- finally {
+ if (!isPersisted()) {
+ hostEntity.setHostName(hostName);
+ } else {
+ throw new UnsupportedOperationException("PK of persisted entity cannot be modified");
+ }
+ } finally {
writeLock.unlock();
}
}
@@ -432,9 +396,8 @@ public class HostImpl implements Host {
public String getIPv4() {
try {
readLock.lock();
- return ipv4;
- }
- finally {
+ return hostEntity.getIpv4();
+ } finally {
readLock.unlock();
}
}
@@ -443,9 +406,9 @@ public class HostImpl implements Host {
public void setIPv4(String ip) {
try {
writeLock.lock();
- this.ipv4 = ip;
- }
- finally {
+ hostEntity.setIpv4(ip);
+ saveIfPersisted();
+ } finally {
writeLock.unlock();
}
}
@@ -454,9 +417,8 @@ public class HostImpl implements Host {
public String getIPv6() {
try {
readLock.lock();
- return ipv6;
- }
- finally {
+ return hostEntity.getIpv6();
+ } finally {
readLock.unlock();
}
}
@@ -465,9 +427,9 @@ public class HostImpl implements Host {
public void setIPv6(String ip) {
try {
writeLock.lock();
- this.ipv6 = ip;
- }
- finally {
+ hostEntity.setIpv6(ip);
+ saveIfPersisted();
+ } finally {
writeLock.unlock();
}
}
@@ -476,9 +438,8 @@ public class HostImpl implements Host {
public int getCpuCount() {
try {
readLock.lock();
- return cpuCount;
- }
- finally {
+ return hostEntity.getCpuCount();
+ } finally {
readLock.unlock();
}
}
@@ -487,9 +448,9 @@ public class HostImpl implements Host {
public void setCpuCount(int cpuCount) {
try {
writeLock.lock();
- this.cpuCount = cpuCount;
- }
- finally {
+ hostEntity.setCpuCount(cpuCount);
+ saveIfPersisted();
+ } finally {
writeLock.unlock();
}
}
@@ -498,9 +459,8 @@ public class HostImpl implements Host {
public long getTotalMemBytes() {
try {
readLock.lock();
- return totalMemBytes;
- }
- finally {
+ return hostEntity.getTotalMem();
+ } finally {
readLock.unlock();
}
}
@@ -509,9 +469,9 @@ public class HostImpl implements Host {
public void setTotalMemBytes(long totalMemBytes) {
try {
writeLock.lock();
- this.totalMemBytes = totalMemBytes;
- }
- finally {
+ hostEntity.setTotalMem(totalMemBytes);
+ saveIfPersisted();
+ } finally {
writeLock.unlock();
}
}
@@ -520,7 +480,7 @@ public class HostImpl implements Host {
public long getAvailableMemBytes() {
try {
readLock.lock();
- return availableMemBytes;
+ return hostStateEntity.getAvailableMem();
}
finally {
readLock.unlock();
@@ -531,7 +491,8 @@ public class HostImpl implements Host {
public void setAvailableMemBytes(long availableMemBytes) {
try {
writeLock.lock();
- this.availableMemBytes = availableMemBytes;
+ hostStateEntity.setAvailableMem(availableMemBytes);
+ saveIfPersisted();
}
finally {
writeLock.unlock();
@@ -542,9 +503,8 @@ public class HostImpl implements Host {
public String getOsArch() {
try {
readLock.lock();
- return osArch;
- }
- finally {
+ return hostEntity.getOsArch();
+ } finally {
readLock.unlock();
}
}
@@ -553,9 +513,9 @@ public class HostImpl implements Host {
public void setOsArch(String osArch) {
try {
writeLock.lock();
- this.osArch = osArch;
- }
- finally {
+ hostEntity.setOsArch(osArch);
+ saveIfPersisted();
+ } finally {
writeLock.unlock();
}
}
@@ -564,9 +524,8 @@ public class HostImpl implements Host {
public String getOsInfo() {
try {
readLock.lock();
- return osInfo;
- }
- finally {
+ return hostEntity.getOsInfo();
+ } finally {
readLock.unlock();
}
}
@@ -575,9 +534,9 @@ public class HostImpl implements Host {
public void setOsInfo(String osInfo) {
try {
writeLock.lock();
- this.osInfo = osInfo;
- }
- finally {
+ hostEntity.setOsInfo(osInfo);
+ saveIfPersisted();
+ } finally {
writeLock.unlock();
}
}
@@ -586,9 +545,8 @@ public class HostImpl implements Host {
public String getOsType() {
try {
readLock.lock();
- return osType;
- }
- finally {
+ return hostEntity.getOsType();
+ } finally {
readLock.unlock();
}
}
@@ -597,9 +555,9 @@ public class HostImpl implements Host {
public void setOsType(String osType) {
try {
writeLock.lock();
- this.osType = osType;
- }
- finally {
+ hostEntity.setOsType(osType);
+ saveIfPersisted();
+ } finally {
writeLock.unlock();
}
}
@@ -608,9 +566,8 @@ public class HostImpl implements Host {
public List<DiskInfo> getDisksInfo() {
try {
readLock.lock();
- return Collections.unmodifiableList(disksInfo);
- }
- finally {
+ return Collections.unmodifiableList(gson.<List<DiskInfo>>fromJson(hostEntity.getDisksInfo(), diskInfoType));
+ } finally {
readLock.unlock();
}
}
@@ -619,9 +576,9 @@ public class HostImpl implements Host {
public void setDisksInfo(List<DiskInfo> disksInfo) {
try {
writeLock.lock();
- this.disksInfo = disksInfo;
- }
- finally {
+ hostEntity.setDisksInfo(gson.toJson(disksInfo, diskInfoType));
+ saveIfPersisted();
+ } finally {
writeLock.unlock();
}
}
@@ -630,9 +587,8 @@ public class HostImpl implements Host {
public HostHealthStatus getHealthStatus() {
try {
readLock.lock();
- return healthStatus;
- }
- finally {
+ return gson.fromJson(hostStateEntity.getHealthStatus(), HostHealthStatus.class);
+ } finally {
readLock.unlock();
}
}
@@ -641,9 +597,9 @@ public class HostImpl implements Host {
public void setHealthStatus(HostHealthStatus healthStatus) {
try {
writeLock.lock();
- this.healthStatus = healthStatus;
- }
- finally {
+ hostStateEntity.setHealthStatus(gson.toJson(healthStatus));
+ saveIfPersisted();
+ } finally {
writeLock.unlock();
}
}
@@ -652,9 +608,9 @@ public class HostImpl implements Host {
public Map<String, String> getHostAttributes() {
try {
readLock.lock();
- return Collections.unmodifiableMap(hostAttributes);
- }
- finally {
+ return Collections.unmodifiableMap(
+ gson.<Map<String, String>>fromJson(hostEntity.getHostAttributes(), hostAttributesType));
+ } finally {
readLock.unlock();
}
}
@@ -663,9 +619,10 @@ public class HostImpl implements Host {
public void setHostAttributes(Map<String, String> hostAttributes) {
try {
writeLock.lock();
- this.hostAttributes.putAll(hostAttributes);
- }
- finally {
+ //TODO should this add attributes and not replace them?
+ hostEntity.setHostAttributes(gson.toJson(hostAttributes, hostAttributesType));
+ saveIfPersisted();
+ } finally {
writeLock.unlock();
}
}
@@ -674,9 +631,8 @@ public class HostImpl implements Host {
public String getRackInfo() {
try {
readLock.lock();
- return rackInfo;
- }
- finally {
+ return hostEntity.getRackInfo();
+ } finally {
readLock.unlock();
}
}
@@ -685,9 +641,9 @@ public class HostImpl implements Host {
public void setRackInfo(String rackInfo) {
try {
writeLock.lock();
- this.rackInfo = rackInfo;
- }
- finally {
+ hostEntity.setRackInfo(rackInfo);
+ saveIfPersisted();
+ } finally {
writeLock.unlock();
}
}
@@ -696,9 +652,8 @@ public class HostImpl implements Host {
public long getLastRegistrationTime() {
try {
readLock.lock();
- return lastRegistrationTime;
- }
- finally {
+ return hostEntity.getLastRegistrationTime();
+ } finally {
readLock.unlock();
}
}
@@ -707,9 +662,9 @@ public class HostImpl implements Host {
public void setLastRegistrationTime(long lastRegistrationTime) {
try {
writeLock.lock();
- this.lastRegistrationTime = lastRegistrationTime;
- }
- finally {
+ this.hostEntity.setLastRegistrationTime(lastRegistrationTime);
+ saveIfPersisted();
+ } finally {
writeLock.unlock();
}
}
@@ -718,7 +673,7 @@ public class HostImpl implements Host {
public long getLastHeartbeatTime() {
try {
readLock.lock();
- return lastHeartbeatTime;
+ return hostStateEntity.getLastHeartbeatTime();
}
finally {
readLock.unlock();
@@ -729,7 +684,8 @@ public class HostImpl implements Host {
public void setLastHeartbeatTime(long lastHeartbeatTime) {
try {
writeLock.lock();
- this.lastHeartbeatTime = lastHeartbeatTime;
+ hostStateEntity.setLastHeartbeatTime(lastHeartbeatTime);
+ saveIfPersisted();
}
finally {
writeLock.unlock();
@@ -740,7 +696,7 @@ public class HostImpl implements Host {
public AgentVersion getAgentVersion() {
try {
readLock.lock();
- return agentVersion;
+ return gson.fromJson(hostStateEntity.getAgentVersion(), AgentVersion.class);
}
finally {
readLock.unlock();
@@ -751,7 +707,8 @@ public class HostImpl implements Host {
public void setAgentVersion(AgentVersion agentVersion) {
try {
writeLock.lock();
- this.agentVersion = agentVersion;
+ hostStateEntity.setAgentVersion(gson.toJson(agentVersion));
+ saveIfPersisted();
}
finally {
writeLock.unlock();
@@ -771,26 +728,26 @@ public class HostImpl implements Host {
}
@Override
- public synchronized HostResponse convertToResponse() {
- HostResponse r = new HostResponse(hostName);
+ public HostResponse convertToResponse() {
try {
readLock.lock();
+ HostResponse r = new HostResponse(getHostName());
- r.setAgentVersion(agentVersion);
- r.setAvailableMemBytes(availableMemBytes);
- r.setCpuCount(cpuCount);
+ r.setAgentVersion(getAgentVersion());
+ r.setAvailableMemBytes(getAvailableMemBytes());
+ r.setCpuCount(getCpuCount());
r.setDisksInfo(getDisksInfo());
- r.setHealthStatus(healthStatus);
+ r.setHealthStatus(getHealthStatus());
r.setHostAttributes(getHostAttributes());
- r.setIpv4(ipv4);
- r.setIpv6(ipv6);
- r.setLastHeartbeatTime(lastHeartbeatTime);
- r.setLastRegistrationTime(lastRegistrationTime);
- r.setOsArch(osArch);
- r.setOsInfo(osInfo);
- r.setOsType(osType);
- r.setRackInfo(rackInfo);
- r.setTotalMemBytes(totalMemBytes);
+ r.setIpv4(getIPv4());
+ r.setIpv6(getIPv6());
+ r.setLastHeartbeatTime(getLastHeartbeatTime());
+ r.setLastRegistrationTime(getLastRegistrationTime());
+ r.setOsArch(getOsArch());
+ r.setOsInfo(getOsInfo());
+ r.setOsType(getOsType());
+ r.setRackInfo(getRackInfo());
+ r.setTotalMemBytes(getTotalMemBytes());
return r;
}
@@ -799,4 +756,93 @@ public class HostImpl implements Host {
}
}
+ @Transactional
+ public void addToCluster(Cluster cluster) {
+ ClusterEntity clusterEntity = clusterDAO.findById(cluster.getClusterId());
+ if (isPersisted()) {
+ hostEntity.getClusterEntities().add(clusterEntity);
+ clusterEntity.getHostEntities().add(hostEntity);
+ clusterDAO.merge(clusterEntity);
+ hostDAO.merge(hostEntity);
+ cluster.refresh();
+ } else {
+ Collection<ClusterEntity> clusters = hostEntity.getClusterEntities();
+ if (clusters == null) {
+ hostEntity.setClusterEntities(new ArrayList<ClusterEntity>());
+ }
+ hostEntity.getClusterEntities().add(clusterEntity);
+ }
+ }
+
+ /**
+ * Shows if Host is persisted to database
+ *
+ * @return true if persisted
+ */
+ @Override
+ public boolean isPersisted() {
+ try {
+ readLock.lock();
+ return persisted;
+ } finally {
+ readLock.unlock();
+ }
+ }
+
+ /**
+ * Save host to database and make all changes to be saved afterwards
+ */
+ @Override
+ @Transactional
+ public void persist() {
+ try {
+ writeLock.lock();
+ if (!persisted) {
+ hostDAO.create(hostEntity);
+ hostStateDAO.create(hostStateEntity);
+ if (!hostEntity.getClusterEntities().isEmpty()) {
+ for (ClusterEntity clusterEntity : hostEntity.getClusterEntities()) {
+ clusterEntity.getHostEntities().add(hostEntity);
+ clusterDAO.merge(clusterEntity);
+ try {
+ clusters.getClusterById(clusterEntity.getClusterId()).refresh();
+ } catch (AmbariException e) {
+ LOG.error(e);
+ throw new RuntimeException("Cluster '" + clusterEntity.getClusterId() + "' was removed", e);
+ }
+ }
+ }
+ hostEntity = hostDAO.merge(hostEntity);
+ hostStateEntity = hostStateDAO.merge(hostStateEntity);
+ persisted = true;
+ } else {
+ hostDAO.merge(hostEntity);
+ hostStateDAO.merge(hostStateEntity);
+ }
+ } finally {
+ writeLock.unlock();
+ }
+ }
+
+ @Override
+ public void refresh() {
+ try {
+ writeLock.lock();
+ if (isPersisted()) {
+ hostEntity = hostDAO.findByName(hostEntity.getHostName());
+ hostStateEntity = hostEntity.getHostStateEntity();
+ hostDAO.refresh(hostEntity);
+ hostStateDAO.refresh(hostStateEntity);
+ }
+ } finally {
+ writeLock.unlock();
+ }
+ }
+
+ private void saveIfPersisted() {
+ if (isPersisted()) {
+ hostDAO.merge(hostEntity);
+ hostStateDAO.merge(hostStateEntity);
+ }
+ }
}
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/state/svccomphost/ServiceComponentHostImpl.java Tue Oct 16 06:38:23 2012
@@ -26,14 +26,17 @@ import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import com.google.gson.Gson;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.assistedinject.Assisted;
+import com.google.inject.assistedinject.AssistedInject;
+import com.google.inject.persist.Transactional;
+import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.controller.ServiceComponentHostResponse;
-import org.apache.ambari.server.state.Config;
-import org.apache.ambari.server.state.State;
-import org.apache.ambari.server.state.ServiceComponent;
-import org.apache.ambari.server.state.ServiceComponentHost;
-import org.apache.ambari.server.state.ServiceComponentHostEvent;
-import org.apache.ambari.server.state.ServiceComponentHostEventType;
-import org.apache.ambari.server.state.StackVersion;
+import org.apache.ambari.server.orm.dao.*;
+import org.apache.ambari.server.orm.entities.*;
+import org.apache.ambari.server.state.*;
import org.apache.ambari.server.state.fsm.InvalidStateTransitonException;
import org.apache.ambari.server.state.fsm.SingleArcTransition;
import org.apache.ambari.server.state.fsm.StateMachine;
@@ -53,14 +56,27 @@ public class ServiceComponentHostImpl im
private final Lock writeLock;
private final ServiceComponent serviceComponent;
- private final String hostName;
+ private final Host host;
+ private boolean persisted = false;
+
+ @Inject
+ Gson gson;
+ @Inject
+ HostComponentStateDAO hostComponentStateDAO;
+ @Inject
+ HostComponentDesiredStateDAO hostComponentDesiredStateDAO;
+ @Inject
+ HostDAO hostDAO;
+ @Inject
+ ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO;
+ @Inject
+ Clusters clusters;
+
+ private HostComponentStateEntity stateEntity;
+ private HostComponentDesiredStateEntity desiredStateEntity;
private Map<String, Config> configs;
private Map<String, Config> desiredConfigs;
- private StackVersion stackVersion;
- private StackVersion desiredStackVersion;
-
- private State desiredState;
private long lastOpStartTime;
private long lastOpEndTime;
@@ -409,25 +425,70 @@ public class ServiceComponentHostImpl im
}
}
- public ServiceComponentHostImpl(ServiceComponent serviceComponent,
- String hostName, boolean isClient) {
+ @AssistedInject
+ public ServiceComponentHostImpl(@Assisted ServiceComponent serviceComponent,
+ @Assisted String hostName, @Assisted boolean isClient, Injector injector) {
super();
+ injector.injectMembers(this);
+
if (isClient) {
this.stateMachine = clientStateMachineFactory.make(this);
} else {
this.stateMachine = daemonStateMachineFactory.make(this);
}
+
ReadWriteLock rwLock = new ReentrantReadWriteLock();
this.readLock = rwLock.readLock();
this.writeLock = rwLock.writeLock();
this.serviceComponent = serviceComponent;
- this.hostName = hostName;
+
+ stateEntity = new HostComponentStateEntity();
+ stateEntity.setCurrentState(stateMachine.getCurrentState());
+ stateEntity.setCurrentStackVersion(gson.toJson(new StackVersion("")));
+
+ desiredStateEntity = new HostComponentDesiredStateEntity();
+ desiredStateEntity.setDesiredStackVersion(gson.toJson(new StackVersion("")));
+
+
+ try {
+ this.host = clusters.getHost(hostName);
+ } catch (AmbariException e) {
+ //TODO exception?
+ LOG.error("Host '{}' was not found", hostName);
+ throw new RuntimeException(e);
+ }
this.resetLastOpInfo();
this.desiredConfigs = new HashMap<String, Config>();
- this.desiredStackVersion = new StackVersion("");
- this.desiredState = State.INIT;
this.configs = new HashMap<String, Config>();
- this.stackVersion = new StackVersion("");
+ }
+
+ @AssistedInject
+ public ServiceComponentHostImpl(@Assisted ServiceComponent serviceComponent,
+ @Assisted HostComponentStateEntity stateEntity,
+ @Assisted HostComponentDesiredStateEntity desiredStateEntity,
+ Injector injector) {
+ injector.injectMembers(this);
+ ReadWriteLock rwLock = new ReentrantReadWriteLock();
+ this.readLock = rwLock.readLock();
+ this.writeLock = rwLock.writeLock();
+ this.serviceComponent = serviceComponent;
+
+
+ this.desiredStateEntity = desiredStateEntity;
+ this.stateEntity = stateEntity;
+ //TODO implement State Machine init as now type choosing is hardcoded in above code
+ this.stateMachine = clientStateMachineFactory.make(this);
+ this.stateMachine.setCurrentState(stateEntity.getCurrentState());
+
+ try {
+ this.host = clusters.getHost(stateEntity.getHostName());
+ } catch (AmbariException e) {
+ //TODO exception? impossible due to database restrictions
+ LOG.error("Host '{}' was not found", stateEntity.getHostName());
+ throw new RuntimeException(e);
+ }
+
+ persisted = true;
}
@Override
@@ -446,6 +507,8 @@ public class ServiceComponentHostImpl im
try {
writeLock.lock();
stateMachine.setCurrentState(state);
+ stateEntity.setCurrentState(state);
+ saveIfPersisted();
}
finally {
writeLock.unlock();
@@ -506,7 +569,7 @@ public class ServiceComponentHostImpl im
@Override
public String getHostName() {
- return hostName;
+ return host.getHostName();
}
/**
@@ -623,7 +686,7 @@ public class ServiceComponentHostImpl im
public StackVersion getStackVersion() {
try {
readLock.lock();
- return stackVersion;
+ return gson.fromJson(stateEntity.getCurrentStackVersion(), StackVersion.class);
}
finally {
readLock.unlock();
@@ -634,7 +697,8 @@ public class ServiceComponentHostImpl im
public void setStackVersion(StackVersion stackVersion) {
try {
writeLock.lock();
- this.stackVersion = stackVersion;
+ stateEntity.setCurrentStackVersion(gson.toJson(stackVersion));
+ saveIfPersisted();
}
finally {
writeLock.unlock();
@@ -646,7 +710,7 @@ public class ServiceComponentHostImpl im
public State getDesiredState() {
try {
readLock.lock();
- return desiredState;
+ return desiredStateEntity.getDesiredState();
}
finally {
readLock.unlock();
@@ -657,7 +721,8 @@ public class ServiceComponentHostImpl im
public void setDesiredState(State state) {
try {
writeLock.lock();
- this.desiredState = state;
+ desiredStateEntity.setDesiredState(state);
+ saveIfPersisted();
}
finally {
writeLock.unlock();
@@ -690,7 +755,7 @@ public class ServiceComponentHostImpl im
public StackVersion getDesiredStackVersion() {
try {
readLock.lock();
- return desiredStackVersion;
+ return gson.fromJson(desiredStateEntity.getDesiredStackVersion(), StackVersion.class);
}
finally {
readLock.unlock();
@@ -701,7 +766,8 @@ public class ServiceComponentHostImpl im
public void setDesiredStackVersion(StackVersion stackVersion) {
try {
writeLock.lock();
- this.desiredStackVersion = stackVersion;
+ desiredStateEntity.setDesiredStackVersion(gson.toJson(stackVersion));
+ saveIfPersisted();
}
finally {
writeLock.unlock();
@@ -730,7 +796,7 @@ public class ServiceComponentHostImpl im
serviceComponent.getClusterName(),
serviceComponent.getServiceName(),
serviceComponent.getName(),
- hostName,
+ getHostName(),
getConfigVersions(),
getState().toString(),
getStackVersion().getStackVersion(),
@@ -751,13 +817,13 @@ public class ServiceComponentHostImpl im
public void debugDump(StringBuilder sb) {
try {
readLock.lock();
- sb.append("ServiceComponentHost={ hostname=" + hostName
+ sb.append("ServiceComponentHost={ hostname=" + getHostName()
+ ", serviceComponentName=" + serviceComponent.getName()
+ ", clusterName=" + serviceComponent.getClusterName()
+ ", serviceName=" + serviceComponent.getServiceName()
- + ", desiredStackVersion=" + desiredStackVersion
- + ", desiredState=" + desiredState
- + ", stackVersion=" + stackVersion
+ + ", desiredStackVersion=" + getDesiredStackVersion()
+ + ", desiredState=" + getDesiredState()
+ + ", stackVersion=" + getStackVersion()
+ ", state=" + getState()
+ " }");
}
@@ -766,4 +832,84 @@ public class ServiceComponentHostImpl im
}
}
+ @Override
+ public boolean isPersisted() {
+ try {
+ readLock.lock();
+ return persisted;
+ } finally {
+ readLock.unlock();
+ }
+ }
+
+ @Override
+ @Transactional
+ public void persist() {
+ try {
+ writeLock.lock();
+ if (!persisted) {
+ serviceComponent.persist(); //TODO is this correct?
+ HostEntity hostEntity = hostDAO.findByName(getHostName());
+ hostEntity.getHostComponentStateEntities().add(stateEntity);
+ hostEntity.getHostComponentDesiredStateEntities().add(desiredStateEntity);
+
+ ServiceComponentDesiredStateEntityPK dpk = new ServiceComponentDesiredStateEntityPK();
+ dpk.setClusterId(serviceComponent.getClusterId());
+ dpk.setServiceName(serviceComponent.getServiceName());
+ dpk.setComponentName(serviceComponent.getName());
+
+ ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findByPK(dpk);
+ serviceComponentDesiredStateEntity.getHostComponentDesiredStateEntities().add(desiredStateEntity);
+
+ desiredStateEntity.setServiceComponentDesiredStateEntity(serviceComponentDesiredStateEntity);
+ desiredStateEntity.setHostEntity(hostEntity);
+ stateEntity.setServiceComponentDesiredStateEntity(serviceComponentDesiredStateEntity);
+ stateEntity.setHostEntity(hostEntity);
+
+ hostComponentStateDAO.create(stateEntity);
+ hostComponentDesiredStateDAO.create(desiredStateEntity);
+
+ serviceComponentDesiredStateDAO.merge(serviceComponentDesiredStateEntity);
+ hostDAO.merge(hostEntity);
+ stateEntity = hostComponentStateDAO.merge(stateEntity);
+ desiredStateEntity = hostComponentDesiredStateDAO.merge(desiredStateEntity);
+
+ host.refresh();
+ serviceComponent.refresh();
+ persisted = true;
+ } else {
+ saveIfPersisted();
+ }
+ } finally {
+ writeLock.unlock();
+ }
+ }
+
+ @Override
+ public synchronized void refresh() {
+ if (isPersisted()) {
+ HostComponentStateEntityPK pk = new HostComponentStateEntityPK();
+ HostComponentDesiredStateEntityPK dpk = new HostComponentDesiredStateEntityPK();
+ pk.setClusterId(getClusterId());
+ pk.setComponentName(getServiceComponentName());
+ pk.setServiceName(getServiceName());
+ pk.setHostName(getHostName());
+ dpk.setClusterId(getClusterId());
+ dpk.setComponentName(getServiceComponentName());
+ dpk.setServiceName(getServiceName());
+ dpk.setHostName(getHostName());
+ stateEntity = hostComponentStateDAO.findByPK(pk);
+ desiredStateEntity = hostComponentDesiredStateDAO.findByPK(dpk);
+ hostComponentStateDAO.refresh(stateEntity);
+ hostComponentDesiredStateDAO.refresh(desiredStateEntity);
+ }
+ }
+
+ private void saveIfPersisted() {
+ if (isPersisted()) {
+ hostComponentStateDAO.merge(stateEntity);
+ hostComponentDesiredStateDAO.merge(desiredStateEntity);
+ }
+ }
+
}
Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/utils/ShellCommandUtil.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/utils/ShellCommandUtil.java?rev=1398669&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/utils/ShellCommandUtil.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/java/org/apache/ambari/server/utils/ShellCommandUtil.java Tue Oct 16 06:38:23 2012
@@ -0,0 +1,72 @@
+/**
+ * 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.utils;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Logs OpenSsl command exit code with description
+ */
+public class ShellCommandUtil {
+ private static final Log LOG = LogFactory.getLog(ShellCommandUtil.class);
+ /*
+ public static String LogAndReturnOpenSslExitCode(String command, int exitCode) {
+ LogOpenSslExitCode(command, exitCode);
+ return getOpenSslCommandResult(command, exitCode);
+ }
+ */
+ public static void LogOpenSslExitCode(String command, int exitCode) {
+ if (exitCode == 0) {
+ LOG.info(getOpenSslCommandResult(command, exitCode));
+ } else {
+ LOG.warn(getOpenSslCommandResult(command, exitCode));
+ }
+
+ }
+
+ public static String getOpenSslCommandResult(String command, int exitCode) {
+ return new StringBuilder().append("Command ").append(command).append(" was finished with exit code: ")
+ .append(exitCode).append(" - ").append(getOpenSslExitCodeDescription(exitCode)).toString();
+ }
+
+ private static String getOpenSslExitCodeDescription(int exitCode) {
+ switch (exitCode) {
+ case 0: {
+ return "the operation was completely successfully.";
+ }
+ case 1: {
+ return "an error occurred parsing the command options.";
+ }
+ case 2: {
+ return "one of the input files could not be read.";
+ }
+ case 3: {
+ return "an error occurred creating the PKCS#7 file or when reading the MIME message.";
+ }
+ case 4: {
+ return "an error occurred decrypting or verifying the message.";
+ }
+ case 5: {
+ return "the message was verified correctly but an error occurred writing out the signers certificates.";
+ }
+ default:
+ return "unsupported code";
+ }
+ }
+}
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/main/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/main/resources/META-INF/persistence.xml?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/main/resources/META-INF/persistence.xml (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/main/resources/META-INF/persistence.xml Tue Oct 16 06:38:23 2012
@@ -22,17 +22,16 @@
<class>org.apache.ambari.server.orm.entities.ClusterEntity</class>
<class>org.apache.ambari.server.orm.entities.ClusterServiceEntity</class>
<class>org.apache.ambari.server.orm.entities.ClusterStateEntity</class>
- <class>org.apache.ambari.server.orm.entities.ComponentHostDesiredStateEntity</class>
+ <class>org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity</class>
<class>org.apache.ambari.server.orm.entities.HostComponentStateEntity</class>
<class>org.apache.ambari.server.orm.entities.HostComponentMappingEntity</class>
<class>org.apache.ambari.server.orm.entities.HostEntity</class>
<class>org.apache.ambari.server.orm.entities.HostStateEntity</class>
<class>org.apache.ambari.server.orm.entities.ServiceComponentConfigEntity</class>
+ <class>org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity</class>
<class>org.apache.ambari.server.orm.entities.ServiceComponentHostConfigEntity</class>
- <class>org.apache.ambari.server.orm.entities.ServiceComponentStateEntity</class>
<class>org.apache.ambari.server.orm.entities.ServiceConfigEntity</class>
<class>org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity</class>
- <class>org.apache.ambari.server.orm.entities.ServiceStateEntity</class>
<class>org.apache.ambari.server.orm.entities.RoleEntity</class>
<class>org.apache.ambari.server.orm.entities.UserEntity</class>
@@ -49,17 +48,16 @@
<class>org.apache.ambari.server.orm.entities.ClusterEntity</class>
<class>org.apache.ambari.server.orm.entities.ClusterServiceEntity</class>
<class>org.apache.ambari.server.orm.entities.ClusterStateEntity</class>
- <class>org.apache.ambari.server.orm.entities.ComponentHostDesiredStateEntity</class>
+ <class>org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity</class>
<class>org.apache.ambari.server.orm.entities.HostComponentStateEntity</class>
<class>org.apache.ambari.server.orm.entities.HostComponentMappingEntity</class>
<class>org.apache.ambari.server.orm.entities.HostEntity</class>
<class>org.apache.ambari.server.orm.entities.HostStateEntity</class>
<class>org.apache.ambari.server.orm.entities.ServiceComponentConfigEntity</class>
+ <class>org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity</class>
<class>org.apache.ambari.server.orm.entities.ServiceComponentHostConfigEntity</class>
- <class>org.apache.ambari.server.orm.entities.ServiceComponentStateEntity</class>
<class>org.apache.ambari.server.orm.entities.ServiceConfigEntity</class>
<class>org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity</class>
- <class>org.apache.ambari.server.orm.entities.ServiceStateEntity</class>
<class>org.apache.ambari.server.orm.entities.RoleEntity</class>
<class>org.apache.ambari.server.orm.entities.UserEntity</class>
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionManager.java Tue Oct 16 06:38:23 2012
@@ -22,25 +22,48 @@ import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
+import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.Role;
import org.apache.ambari.server.RoleCommand;
import org.apache.ambari.server.agent.ActionQueue;
import org.apache.ambari.server.agent.CommandReport;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.cluster.ClustersImpl;
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostStartEvent;
import org.apache.ambari.server.utils.StageUtils;
+import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
public class TestActionManager {
private long requestId = 23;
private long stageId = 31;
-
+ private Injector injector;
+ private Clusters clusters;
+
+ @Before
+ public void setup() throws AmbariException {
+ injector = Guice.createInjector(new InMemoryDefaultTestModule());
+ injector.getInstance(GuiceJpaInitializer.class);
+ clusters = injector.getInstance(Clusters.class);
+ }
+
+ @After
+ public void teardown() throws AmbariException {
+ injector.getInstance(PersistService.class).stop();
+ }
+
@Test
public void testActionResponse() {
ActionDBAccessor db = new ActionDBInMemoryImpl();
ActionManager am = new ActionManager(5000, 1200000, new ActionQueue(),
- new ClustersImpl(), db);
+ clusters, db);
String hostname = "host1";
populateActionDB(db, hostname);
List<CommandReport> reports = new ArrayList<CommandReport>();
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java Tue Oct 16 06:38:23 2012
@@ -20,20 +20,42 @@ package org.apache.ambari.server.agent;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.actionmanager.ActionDBInMemoryImpl;
import org.apache.ambari.server.actionmanager.ActionManager;
import org.apache.ambari.server.agent.HostStatus.Status;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.HostState;
import org.apache.ambari.server.state.cluster.ClustersImpl;
import org.apache.ambari.server.state.fsm.InvalidStateTransitonException;
import org.apache.ambari.server.state.host.HostImpl;
+import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
public class TestHeartbeatHandler {
+ private Injector injector;
+ private Clusters clusters;
+
+ @Before
+ public void setup() throws AmbariException{
+ injector = Guice.createInjector(new InMemoryDefaultTestModule());
+ injector.getInstance(GuiceJpaInitializer.class);
+ clusters = injector.getInstance(Clusters.class);
+ }
+
+ @After
+ public void teardown() throws AmbariException {
+ injector.getInstance(PersistService.class).stop();
+ }
+
@Test
public void testHeartbeat() throws AmbariException {
ActionManager am = new ActionManager(0, 0, null, null,
@@ -49,7 +71,8 @@ public class TestHeartbeatHandler {
HeartBeat hb = new HeartBeat();
hb.setNodeStatus(new HostStatus(Status.HEALTHY, "I am ok"));
hb.setHostname(hostname);
- Host hostObject = new HostImpl(hostname);
+ clusters.addHost(hostname);
+ Host hostObject = clusters.getHost(hostname);
hostObject.setState(HostState.UNHEALTHY);
when(fsm.getHost(hostname)).thenReturn(hostObject);
handler.handleHeartBeat(hb);
@@ -65,7 +88,8 @@ public class TestHeartbeatHandler {
Clusters fsm = mock(Clusters.class);
String hostname = "host1";
HeartBeatHandler handler = new HeartBeatHandler(fsm, new ActionQueue(), am);
- Host hostObject = new HostImpl(hostname);
+ clusters.addHost(hostname);
+ Host hostObject = clusters.getHost(hostname);
when(fsm.getHost(hostname)).thenReturn(hostObject);
Register reg = new Register();
@@ -82,7 +106,7 @@ public class TestHeartbeatHandler {
public void testRegisterNewNode() throws AmbariException, InvalidStateTransitonException {
ActionManager am = new ActionManager(0, 0, null, null,
new ActionDBInMemoryImpl());
- Clusters fsm = new ClustersImpl();
+ Clusters fsm = clusters;
String hostname = "host1";
fsm.addHost(hostname);
HeartBeatHandler handler = new HeartBeatHandler(fsm, new ActionQueue(), am);
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java Tue Oct 16 06:38:23 2012
@@ -20,12 +20,11 @@ package org.apache.ambari.server.control
import static org.junit.Assert.fail;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
import junit.framework.Assert;
import org.apache.ambari.server.AmbariException;
@@ -34,14 +33,17 @@ import org.apache.ambari.server.actionma
import org.apache.ambari.server.actionmanager.ActionManager;
import org.apache.ambari.server.actionmanager.Stage;
import org.apache.ambari.server.agent.ActionQueue;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.State;
-import org.apache.ambari.server.state.cluster.ClustersImpl;
import org.apache.ambari.server.utils.StageUtils;
import org.junit.After;
import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -54,21 +56,22 @@ public class AmbariManagementControllerT
private AmbariManagementController controller;
private Clusters clusters;
private ActionDBAccessor db;
+ private Injector injector;
@Before
public void setup() {
- clusters = new ClustersImpl();
- db = new ActionDBInMemoryImpl();
- ActionManager am = new ActionManager(5000, 1200000, new ActionQueue(),
- clusters, db);
- controller = new AmbariManagementControllerImpl(am, clusters);
+ injector = Guice.createInjector(new InMemoryDefaultTestModule());
+ injector.getInstance(GuiceJpaInitializer.class);
+ clusters = injector.getInstance(Clusters.class);
+// ActionManager am = new ActionManager(5000, 1200000, new ActionQueue(),
+// clusters, db);
+ db = injector.getInstance(ActionDBAccessor.class);
+ controller = injector.getInstance(AmbariManagementController.class);
}
@After
public void teardown() {
- controller = null;
- clusters = null;
- db = null;
+ injector.getInstance(PersistService.class).stop();
}
private void createCluster(String clusterName) throws AmbariException {
@@ -247,8 +250,11 @@ public class AmbariManagementControllerT
State.INIT);
String host1 = "h1";
+ clusters.addHost(host1);
+ clusters.getHost("h1").persist();
String host2 = "h2";
-
+ clusters.addHost(host2);
+ clusters.getHost("h2").persist();
try {
createServiceComponentHost(clusterName, serviceName, componentName1,
host1, State.INSTALLING);
Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java?rev=1398669&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java Tue Oct 16 06:38:23 2012
@@ -0,0 +1,16 @@
+package org.apache.ambari.server.orm;
+
+import com.google.inject.AbstractModule;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.controller.ControllerModule;
+
+import java.util.Properties;
+
+public class InMemoryDefaultTestModule extends AbstractModule {
+ @Override
+ protected void configure() {
+ Properties properties = new Properties();
+ properties.setProperty(Configuration.PERSISTENCE_IN_MEMORY_KEY, "true");
+ install(new ControllerModule(properties));
+ }
+}
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java Tue Oct 16 06:38:23 2012
@@ -27,6 +27,7 @@ import org.apache.ambari.server.orm.dao.
import org.apache.ambari.server.orm.dao.RoleDAO;
import org.apache.ambari.server.orm.dao.UserDAO;
import org.apache.ambari.server.orm.entities.*;
+import org.apache.ambari.server.state.HostState;
import org.springframework.security.crypto.password.PasswordEncoder;
import javax.persistence.EntityManager;
@@ -66,9 +67,9 @@ public class OrmTestHelper {
host1.setHostName("test_host1");
host2.setHostName("test_host2");
host3.setHostName("test_host3");
- host1.setIp("192.168.0.1");
- host2.setIp("192.168.0.2");
- host3.setIp("192.168.0.3");
+ host1.setIpv4("192.168.0.1");
+ host2.setIpv4("192.168.0.2");
+ host3.setIpv4("192.168.0.3");
List<HostEntity> hostEntities = new ArrayList<HostEntity>();
hostEntities.add(host1);
@@ -77,14 +78,14 @@ public class OrmTestHelper {
clusterEntity.setHostEntities(hostEntities);
//both sides of relation should be set when modifying in runtime
- host1.setClusterEntity(clusterEntity);
- host2.setClusterEntity(clusterEntity);
+ host1.setClusterEntities(Arrays.asList(clusterEntity));
+ host2.setClusterEntities(Arrays.asList(clusterEntity));
HostStateEntity hostStateEntity1 = new HostStateEntity();
- hostStateEntity1.setCurrentState("TEST_STATE1");
+ hostStateEntity1.setCurrentState(HostState.HEARTBEAT_LOST);
hostStateEntity1.setHostEntity(host1);
HostStateEntity hostStateEntity2 = new HostStateEntity();
- hostStateEntity2.setCurrentState("TEST_STATE2");
+ hostStateEntity2.setCurrentState(HostState.HEALTHY);
hostStateEntity2.setHostEntity(host2);
host1.setHostStateEntity(hostStateEntity1);
host2.setHostStateEntity(hostStateEntity2);
@@ -145,7 +146,7 @@ public class OrmTestHelper {
public int getClusterSizeByHostName(String hostName) {
Query query = getEntityManager().createQuery(
- "SELECT host2 from HostEntity host join host.clusterEntity cluster join cluster.hostEntities host2 where host.hostName=:hostName");
+ "SELECT host2 from HostEntity host join host.clusterEntities clusters join clusters.hostEntities host2 where host.hostName=:hostName");
query.setParameter("hostName", hostName);
Collection hosts = query.getResultList();
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/orm/TestOrmImpl.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/orm/TestOrmImpl.java?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/orm/TestOrmImpl.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/orm/TestOrmImpl.java Tue Oct 16 06:38:23 2012
@@ -35,6 +35,7 @@ import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.RollbackException;
+import java.util.Collection;
import java.util.Date;
import java.util.List;
@@ -90,7 +91,7 @@ public class TestOrmImpl extends Assert
entityManager.persist(clusterEntity);
entityManager.getTransaction().rollback();
- assertNull("transaction was not rolled back", entityManager.find(ClusterEntity.class, testClusterName));
+ assertNull("transaction was not rolled back", injector.getInstance(ClusterDAO.class).findByName(testClusterName));
}
/**
@@ -132,8 +133,7 @@ public class TestOrmImpl extends Assert
clusterServiceDAO.remove(clusterServiceEntity);
- assertNull(clusterServiceDAO
- .findByClusterAndServiceNames(clusterName, serviceName));
+ assertNull(clusterServiceDAO.findByClusterAndServiceNames(clusterName, serviceName));
}
@@ -151,15 +151,14 @@ public class TestOrmImpl extends Assert
clusterServiceDAO.create(clusterServiceEntity);
clusterDAO.merge(cluster);
- clusterServiceEntity = clusterServiceDAO
- .findByClusterAndServiceNames(clusterName, serviceName);
+ clusterServiceEntity = clusterServiceDAO.findByClusterAndServiceNames(clusterName, serviceName);
assertNotNull(clusterServiceEntity);
ServiceConfigEntity serviceConfigEntity = new ServiceConfigEntity();
serviceConfigEntity.setConfigSnapshotTime(currentTime);
serviceConfigEntity.setClusterServiceEntity(clusterServiceEntity);
- List<ServiceConfigEntity> list = clusterServiceEntity.getServiceConfigEntities();
+ Collection<ServiceConfigEntity> list = clusterServiceEntity.getServiceConfigEntities();
list.add(serviceConfigEntity);
clusterServiceEntity.setServiceConfigEntities(list);
Added: incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/security/SslExecutionTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/security/SslExecutionTest.java?rev=1398669&view=auto
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/security/SslExecutionTest.java (added)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/security/SslExecutionTest.java Tue Oct 16 06:38:23 2012
@@ -0,0 +1,113 @@
+/**
+ * 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.security;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.*;
+import org.junit.rules.TemporaryFolder;
+import static org.junit.Assert.assertTrue;
+
+import java.io.*;
+import java.lang.reflect.Constructor;
+import java.util.Properties;
+
+public class SslExecutionTest {
+
+ private static Log LOG = LogFactory.getLog(SslExecutionTest.class);
+ public TemporaryFolder temp = new TemporaryFolder();
+
+ Injector injector;
+
+ private static CertificateManager certMan;
+
+ @Inject
+ static void init(CertificateManager instance) {
+ certMan = instance;
+ }
+
+
+ private class SecurityModule extends AbstractModule {
+ @Override
+ protected void configure() {
+ bind(Properties.class).toInstance(buildTestProperties());
+ bind(Configuration.class).toConstructor(getConfigurationConstructor());
+ requestStaticInjection(SslExecutionTest.class);
+ }
+ }
+
+ protected Properties buildTestProperties() {
+ try {
+ temp.create();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ Properties properties = new Properties();
+ properties.setProperty(Configuration.SRVR_KSTR_DIR_KEY, temp.getRoot().getAbsolutePath());
+
+ return properties;
+ }
+
+ protected Constructor<Configuration> getConfigurationConstructor() {
+ try {
+ return Configuration.class.getConstructor(Properties.class);
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException("Expected constructor not found in Configuration.java", e);
+ }
+ }
+
+ @Before
+ public void setUp() throws IOException {
+
+ injector = Guice.createInjector(new SecurityModule());
+ certMan = injector.getInstance(CertificateManager.class);
+
+ certMan.initRootCert();
+
+ }
+
+ @After
+ public void tearDown() throws IOException {
+ temp.delete();
+ }
+
+ @Test
+ public void testSslLogging() throws Exception {
+ LOG.info("Testing sign");
+
+ certMan.configs.getConfigsMap().put(Configuration.PASSPHRASE_KEY, "123123");
+
+ LOG.info("key dir = " + certMan.configs.getConfigsMap().get(Configuration.SRVR_KSTR_DIR_KEY));
+
+ SignCertResponse signAgentCrt = certMan.signAgentCrt("somehost", "gdfgdfg", "123123");
+ LOG.info("-------------RESPONCE-------------");
+ LOG.info("-------------MESSAGE--------------");
+ LOG.info(signAgentCrt.getMessage());
+ LOG.info("---------------------------------");
+ LOG.info("-------------RESULT--------------");
+ LOG.info(signAgentCrt.getResult());
+ LOG.info("---------------------------------");
+ assertTrue(SignCertResponse.ERROR_STATUS.equals(signAgentCrt.getResult()));
+ }
+
+}
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java Tue Oct 16 06:38:23 2012
@@ -18,9 +18,14 @@
package org.apache.ambari.server.state;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
import junit.framework.Assert;
import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.state.cluster.ClustersImpl;
import org.junit.After;
import org.junit.Before;
@@ -31,29 +36,33 @@ public class ServiceTest {
private Clusters clusters;
private Cluster cluster;
private String clusterName;
+ private Injector injector;
+ private ServiceFactory serviceFactory;
@Before
public void setup() throws AmbariException {
- clusters = new ClustersImpl();
+ injector = Guice.createInjector(new InMemoryDefaultTestModule());
+ injector.getInstance(GuiceJpaInitializer.class);
+ clusters = injector.getInstance(Clusters.class);
+ serviceFactory = injector.getInstance(ServiceFactory.class);
clusterName = "foo";
clusters.addCluster(clusterName);
cluster = clusters.getCluster(clusterName);
Assert.assertNotNull(cluster);
}
-
+
@After
public void teardown() throws AmbariException {
- clusters = null;
- cluster = null;
+ injector.getInstance(PersistService.class).stop();
}
-
+
@Test
public void testCreateService() throws AmbariException {
String serviceName = "s1";
- Service s = new ServiceImpl(cluster, serviceName);
+ Service s = serviceFactory.createNew(cluster, serviceName);
cluster.addService(s);
Service service = cluster.getService(serviceName);
-
+
Assert.assertNotNull(service);
Assert.assertEquals(serviceName, service.getName());
Assert.assertEquals(cluster.getClusterId(),
@@ -68,7 +77,7 @@ public class ServiceTest {
@Test
public void testGetAndSetServiceInfo() throws AmbariException {
String serviceName = "s1";
- Service s = new ServiceImpl(cluster, serviceName);
+ Service s = serviceFactory.createNew(cluster, serviceName);
cluster.addService(s);
Service service = cluster.getService(serviceName);
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java Tue Oct 16 06:38:23 2012
@@ -24,11 +24,16 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
import junit.framework.Assert;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.agent.DiskInfo;
import org.apache.ambari.server.agent.HostInfo;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.controller.ClusterResponse;
import org.apache.ambari.server.state.AgentVersion;
import org.apache.ambari.server.state.Cluster;
@@ -53,10 +58,13 @@ public class ClusterTest {
String h1 = "h1";
String s1 = "s1";
String sc1 = "sc1";
+ private Injector injector;
@Before
public void setup() throws AmbariException {
- clusters = new ClustersImpl();
+ injector = Guice.createInjector(new InMemoryDefaultTestModule());
+ injector.getInstance(GuiceJpaInitializer.class);
+ clusters = injector.getInstance(Clusters.class);
clusters.addCluster("c1");
c1 = clusters.getCluster("c1");
Assert.assertEquals("c1", c1.getClusterName());
@@ -66,8 +74,7 @@ public class ClusterTest {
@After
public void teardown() {
- clusters = null;
- c1 = null;
+ injector.getInstance(PersistService.class).stop();
}
@Test
@@ -151,12 +158,12 @@ public class ClusterTest {
Assert.assertNotNull(c2);
- Assert.assertEquals(clusterName.hashCode(), c2.getClusterId());
+// Assert.assertEquals(clusterName.hashCode(), c2.getClusterId()); This is not true
Assert.assertEquals(clusterName, c2.getClusterName());
c2.setClusterName("foo2");
Assert.assertEquals("foo2", c2.getClusterName());
- Assert.assertEquals(clusterName.hashCode(), c2.getClusterId());
+// Assert.assertEquals(clusterName.hashCode(), c2.getClusterId());
Assert.assertNotNull(c2.getDesiredStackVersion());
Assert.assertEquals("", c2.getDesiredStackVersion().getStackVersion());
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java Tue Oct 16 06:38:23 2012
@@ -24,14 +24,18 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
import junit.framework.Assert;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ClusterNotFoundException;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.cluster.ClustersImpl;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -39,15 +43,18 @@ import org.junit.Test;
public class ClustersTest {
private Clusters clusters;
+ private Injector injector;
@Before
public void setup() {
- clusters = new ClustersImpl();
+ injector = Guice.createInjector(new InMemoryDefaultTestModule());
+ injector.getInstance(GuiceJpaInitializer.class);
+ clusters = injector.getInstance(Clusters.class);
}
@After
public void teardown() {
- clusters = null;
+ injector.getInstance(PersistService.class).stop();
}
@Test
Modified: incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostImplTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostImplTest.java?rev=1398669&r1=1398668&r2=1398669&view=diff
==============================================================================
--- incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostImplTest.java (original)
+++ incubator/ambari/branches/AMBARI-666/ambari-server/src/test/java/org/apache/ambari/server/state/host/HostImplTest.java Tue Oct 16 06:38:23 2012
@@ -23,11 +23,15 @@ import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.List;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
+import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.agent.DiskInfo;
import org.apache.ambari.server.agent.HostInfo;
-import org.apache.ambari.server.state.AgentVersion;
-import org.apache.ambari.server.state.HostHealthStatus;
-import org.apache.ambari.server.state.HostState;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.state.*;
import org.apache.ambari.server.state.HostHealthStatus.HealthStatus;
import org.apache.ambari.server.state.host.HostHealthyHeartbeatEvent;
import org.apache.ambari.server.state.host.HostHeartbeatLostEvent;
@@ -35,13 +39,30 @@ import org.apache.ambari.server.state.ho
import org.apache.ambari.server.state.host.HostRegistrationRequestEvent;
import org.apache.ambari.server.state.host.HostStatusUpdatesReceivedEvent;
import org.apache.ambari.server.state.host.HostUnhealthyHeartbeatEvent;
+import org.junit.After;
import org.junit.Assert;
+import org.junit.Before;
import org.junit.Test;
public class HostImplTest {
+ private Injector injector;
+ private Clusters clusters;
+
+ @Before
+ public void setup() throws AmbariException{
+ injector = Guice.createInjector(new InMemoryDefaultTestModule());
+ injector.getInstance(GuiceJpaInitializer.class);
+ clusters = injector.getInstance(Clusters.class);
+ }
+
+ @After
+ public void teardown() throws AmbariException {
+ injector.getInstance(PersistService.class).stop();
+ }
+
@Test
- public void testHostInfoImport() {
+ public void testHostInfoImport() throws AmbariException{
HostInfo info = new HostInfo();
info.setMemorySize(100);
info.setProcessorCount(10);
@@ -56,7 +77,9 @@ public class HostImplTest {
info.setOS("os_type");
info.setMemoryTotal(10);
- HostImpl host = new HostImpl("foo");
+ clusters.addHost("foo");
+ Host host = clusters.getHost("foo");
+
host.importHostInfo(info);
Assert.assertEquals(info.getHostName(), host.getHostName());
@@ -68,7 +91,7 @@ public class HostImplTest {
Assert.assertEquals(info.getOS(), host.getOsType());
}
- private void registerHost(HostImpl host) throws Exception {
+ private void registerHost(Host host) throws Exception {
HostInfo info = new HostInfo();
info.setMemorySize(100);
info.setProcessorCount(10);
@@ -93,24 +116,24 @@ public class HostImplTest {
Assert.assertEquals(currentTime, host.getLastRegistrationTime());
}
- private void ensureHostUpdatesReceived(HostImpl host) throws Exception {
+ private void ensureHostUpdatesReceived(Host host) throws Exception {
HostStatusUpdatesReceivedEvent e =
new HostStatusUpdatesReceivedEvent(host.getHostName(), 1);
host.handleEvent(e);
}
- private void verifyHostState(HostImpl host, HostState state) {
+ private void verifyHostState(Host host, HostState state) {
Assert.assertEquals(state, host.getState());
}
- private void sendHealthyHeartbeat(HostImpl host, long counter)
+ private void sendHealthyHeartbeat(Host host, long counter)
throws Exception {
HostHealthyHeartbeatEvent e = new HostHealthyHeartbeatEvent(
host.getHostName(), counter);
host.handleEvent(e);
}
- private void sendUnhealthyHeartbeat(HostImpl host, long counter)
+ private void sendUnhealthyHeartbeat(Host host, long counter)
throws Exception {
HostHealthStatus healthStatus = new HostHealthStatus(HealthStatus.UNHEALTHY,
"Unhealthy server");
@@ -119,21 +142,23 @@ public class HostImplTest {
host.handleEvent(e);
}
- private void timeoutHost(HostImpl host) throws Exception {
+ private void timeoutHost(Host host) throws Exception {
HostHeartbeatLostEvent e = new HostHeartbeatLostEvent(
host.getHostName());
host.handleEvent(e);
}
@Test
- public void testHostFSMInit() {
- HostImpl host = new HostImpl("foo");
+ public void testHostFSMInit() throws AmbariException{
+ clusters.addHost("foo");
+ Host host = clusters.getHost("foo");
verifyHostState(host, HostState.INIT);
}
@Test
public void testHostRegistrationFlow() throws Exception {
- HostImpl host = new HostImpl("foo");
+ clusters.addHost("foo");
+ Host host = clusters.getHost("foo");
registerHost(host);
verifyHostState(host, HostState.WAITING_FOR_HOST_STATUS_UPDATES);
@@ -165,7 +190,8 @@ public class HostImplTest {
@Test
public void testHostHeartbeatFlow() throws Exception {
- HostImpl host = new HostImpl("foo");
+ clusters.addHost("foo");
+ Host host = clusters.getHost("foo");
registerHost(host);
ensureHostUpdatesReceived(host);
@@ -232,7 +258,8 @@ public class HostImplTest {
@Test
public void testHostRegistrationsInAnyState() throws Exception {
- HostImpl host = new HostImpl("foo");
+ clusters.addHost("foo");
+ Host host = clusters.getHost("foo");;
long counter = 0;
registerHost(host);