You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2015/01/29 00:33:03 UTC
[3/3] ambari git commit: AMBARI-9368 - Deadlock Between Dependent
Cluster/Service/Component/Host Implementations (jonathanhurley)
AMBARI-9368 - Deadlock Between Dependent Cluster/Service/Component/Host Implementations (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/23d506e2
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/23d506e2
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/23d506e2
Branch: refs/heads/trunk
Commit: 23d506e2aec743f129aaa48a7a1619be9d33910a
Parents: 86dc939
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed Jan 28 15:08:26 2015 -0500
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Wed Jan 28 18:32:55 2015 -0500
----------------------------------------------------------------------
.../server/state/ServiceComponentImpl.java | 304 ++-
.../apache/ambari/server/state/ServiceImpl.java | 292 +--
.../server/state/cluster/ClusterImpl.java | 1741 ++++++++----------
.../svccomphost/ServiceComponentHostImpl.java | 697 +++----
.../state/cluster/ClusterDeadlockTest.java | 363 ++++
5 files changed, 1540 insertions(+), 1857 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/23d506e2/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
index a31e42c..d1b40df 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
@@ -18,12 +18,12 @@
package org.apache.ambari.server.state;
-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 java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ObjectNotFoundException;
import org.apache.ambari.server.ServiceComponentHostNotFoundException;
@@ -43,11 +43,12 @@ import org.apache.ambari.server.state.cluster.ClusterImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-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;
public class ServiceComponentImpl implements ServiceComponent {
@@ -78,22 +79,22 @@ public class ServiceComponentImpl implements ServiceComponent {
public ServiceComponentImpl(@Assisted Service service,
@Assisted String componentName, Injector injector) throws AmbariException {
injector.injectMembers(this);
- this.clusterGlobalLock = service.getClusterGlobalLock();
+ clusterGlobalLock = service.getClusterGlobalLock();
this.service = service;
- this.desiredStateEntity = new ServiceComponentDesiredStateEntity();
+ desiredStateEntity = new ServiceComponentDesiredStateEntity();
desiredStateEntity.setComponentName(componentName);
desiredStateEntity.setDesiredState(State.INIT);
setDesiredStackVersion(service.getDesiredStackVersion());
- this.hostComponents = new HashMap<String, ServiceComponentHost>();
+ hostComponents = new HashMap<String, ServiceComponentHost>();
StackId stackId = service.getDesiredStackVersion();
try {
ComponentInfo compInfo = ambariMetaInfo.getComponent(stackId.getStackName(),
stackId.getStackVersion(), service.getName(), componentName);
- this.isClientComponent = compInfo.isClient();
- this.isMasterComponent = compInfo.isMaster();
+ isClientComponent = compInfo.isClient();
+ isMasterComponent = compInfo.isMaster();
} catch (ObjectNotFoundException e) {
throw new RuntimeException("Trying to create a ServiceComponent"
+ " not recognized in stack info"
@@ -102,7 +103,6 @@ public class ServiceComponentImpl implements ServiceComponent {
+ ", componentName=" + componentName
+ ", stackInfo=" + stackId.getStackId());
}
- init();
}
@AssistedInject
@@ -110,11 +110,11 @@ public class ServiceComponentImpl implements ServiceComponent {
@Assisted ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity,
Injector injector) throws AmbariException {
injector.injectMembers(this);
- this.clusterGlobalLock = service.getClusterGlobalLock();
+ clusterGlobalLock = service.getClusterGlobalLock();
this.service = service;
- this.desiredStateEntity = serviceComponentDesiredStateEntity;
+ desiredStateEntity = serviceComponentDesiredStateEntity;
- this.hostComponents = new HashMap<String, ServiceComponentHost>();
+ hostComponents = new HashMap<String, ServiceComponentHost>();
for (HostComponentStateEntity hostComponentStateEntity : desiredStateEntity.getHostComponentStateEntities()) {
HostComponentDesiredStateEntityPK pk = new HostComponentDesiredStateEntityPK();
pk.setClusterId(hostComponentStateEntity.getClusterId());
@@ -134,8 +134,8 @@ public class ServiceComponentImpl implements ServiceComponent {
ComponentInfo compInfo = ambariMetaInfo.getComponent(
stackId.getStackName(), stackId.getStackVersion(), service.getName(),
getName());
- this.isClientComponent = compInfo.isClient();
- this.isMasterComponent = compInfo.isMaster();
+ isClientComponent = compInfo.isClient();
+ isMasterComponent = compInfo.isMaster();
} catch (ObjectNotFoundException e) {
throw new AmbariException("Trying to create a ServiceComponent"
+ " not recognized in stack info"
@@ -148,11 +148,6 @@ public class ServiceComponentImpl implements ServiceComponent {
persisted = true;
}
- private void init() {
- // TODO load during restart
- // initialize from DB
- }
-
@Override
public ReadWriteLock getClusterGlobalLock() {
return clusterGlobalLock;
@@ -160,47 +155,17 @@ public class ServiceComponentImpl implements ServiceComponent {
@Override
public String getName() {
- clusterGlobalLock.readLock().lock();
- try {
- readWriteLock.readLock().lock();
- try {
- return desiredStateEntity.getComponentName();
- } finally {
- readWriteLock.readLock().unlock();
- }
- } finally {
- clusterGlobalLock.readLock().unlock();
- }
+ return desiredStateEntity.getComponentName();
}
@Override
public String getServiceName() {
- clusterGlobalLock.readLock().lock();
- try {
- readWriteLock.readLock().lock();
- try {
- return service.getName();
- } finally {
- readWriteLock.readLock().unlock();
- }
- } finally {
- clusterGlobalLock.readLock().unlock();
- }
+ return service.getName();
}
@Override
public long getClusterId() {
- clusterGlobalLock.readLock().lock();
- try {
- readWriteLock.readLock().lock();
- try {
- return this.service.getClusterId();
- } finally {
- readWriteLock.readLock().unlock();
- }
- } finally {
- clusterGlobalLock.readLock().unlock();
- }
+ return service.getClusterId();
}
@Override
@@ -272,7 +237,7 @@ public class ServiceComponentImpl implements ServiceComponent {
// FIXME need a better approach of caching components by host
ClusterImpl clusterImpl = (ClusterImpl) service.getCluster();
clusterImpl.addServiceComponentHost(hostComponent);
- this.hostComponents.put(hostComponent.getHostName(), hostComponent);
+ hostComponents.put(hostComponent.getHostName(), hostComponent);
} finally {
readWriteLock.writeLock().unlock();
}
@@ -311,7 +276,7 @@ public class ServiceComponentImpl implements ServiceComponent {
ClusterImpl clusterImpl = (ClusterImpl) service.getCluster();
clusterImpl.addServiceComponentHost(hostComponent);
- this.hostComponents.put(hostComponent.getHostName(), hostComponent);
+ hostComponents.put(hostComponent.getHostName(), hostComponent);
return hostComponent;
} finally {
@@ -333,7 +298,7 @@ public class ServiceComponentImpl implements ServiceComponent {
throw new ServiceComponentHostNotFoundException(getClusterName(),
getServiceName(), getName(), hostname);
}
- return this.hostComponents.get(hostname);
+ return hostComponents.get(hostname);
} finally {
readWriteLock.readLock().unlock();
}
@@ -344,149 +309,106 @@ public class ServiceComponentImpl implements ServiceComponent {
@Override
public State getDesiredState() {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.readLock().lock();
try {
- readWriteLock.readLock().lock();
- try {
- return desiredStateEntity.getDesiredState();
- } finally {
- readWriteLock.readLock().unlock();
- }
+ return desiredStateEntity.getDesiredState();
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.readLock().unlock();
}
}
@Override
public void setDesiredState(State state) {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.writeLock().lock();
try {
- readWriteLock.writeLock().lock();
- try {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Setting DesiredState of Service"
- + ", clusterName=" + service.getCluster().getClusterName()
- + ", clusterId=" + service.getCluster().getClusterId()
- + ", serviceName=" + service.getName()
- + ", serviceComponentName=" + getName()
- + ", oldDesiredState=" + getDesiredState()
- + ", newDesiredState=" + state);
- }
- desiredStateEntity.setDesiredState(state);
- saveIfPersisted();
- } finally {
- readWriteLock.writeLock().unlock();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Setting DesiredState of Service" + ", clusterName="
+ + service.getCluster().getClusterName() + ", clusterId="
+ + service.getCluster().getClusterId() + ", serviceName="
+ + service.getName() + ", serviceComponentName=" + getName()
+ + ", oldDesiredState=" + getDesiredState() + ", newDesiredState="
+ + state);
}
+ desiredStateEntity.setDesiredState(state);
+ saveIfPersisted();
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.writeLock().unlock();
}
}
@Override
public StackId getDesiredStackVersion() {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.readLock().lock();
try {
- readWriteLock.readLock().lock();
- try {
- return gson.fromJson(desiredStateEntity.getDesiredStackVersion(), StackId.class);
- } finally {
- readWriteLock.readLock().unlock();
- }
+ return gson.fromJson(desiredStateEntity.getDesiredStackVersion(),
+ StackId.class);
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.readLock().unlock();
}
}
@Override
public void setDesiredStackVersion(StackId stackVersion) {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.writeLock().lock();
try {
- readWriteLock.writeLock().lock();
- try {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Setting DesiredStackVersion of Service"
- + ", clusterName=" + service.getCluster().getClusterName()
- + ", clusterId=" + service.getCluster().getClusterId()
- + ", serviceName=" + service.getName()
- + ", serviceComponentName=" + getName()
- + ", oldDesiredStackVersion=" + getDesiredStackVersion()
- + ", newDesiredStackVersion=" + stackVersion);
- }
- desiredStateEntity.setDesiredStackVersion(gson.toJson(stackVersion));
- saveIfPersisted();
- } finally {
- readWriteLock.writeLock().unlock();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Setting DesiredStackVersion of Service" + ", clusterName="
+ + service.getCluster().getClusterName() + ", clusterId="
+ + service.getCluster().getClusterId() + ", serviceName="
+ + service.getName() + ", serviceComponentName=" + getName()
+ + ", oldDesiredStackVersion=" + getDesiredStackVersion()
+ + ", newDesiredStackVersion=" + stackVersion);
}
+ desiredStateEntity.setDesiredStackVersion(gson.toJson(stackVersion));
+ saveIfPersisted();
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.writeLock().unlock();
}
}
@Override
public ServiceComponentResponse convertToResponse() {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.readLock().lock();
try {
- readWriteLock.readLock().lock();
- try {
- ServiceComponentResponse r = new ServiceComponentResponse(
- getClusterId(), service.getCluster().getClusterName(),
- service.getName(), getName(),
- getDesiredStackVersion().getStackId(),
- getDesiredState().toString(), getTotalCount(), getStartedCount(),
- getInstalledCount());
- return r;
- } finally {
- readWriteLock.readLock().unlock();
- }
+ Cluster cluster = service.getCluster();
+ ServiceComponentResponse r = new ServiceComponentResponse(getClusterId(),
+ cluster.getClusterName(), service.getName(), getName(),
+ getDesiredStackVersion().getStackId(), getDesiredState().toString(),
+ getTotalCount(), getStartedCount(), getInstalledCount());
+ return r;
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.readLock().unlock();
}
}
@Override
public String getClusterName() {
- clusterGlobalLock.readLock().lock();
- try {
- readWriteLock.readLock().lock();
- try {
- return service.getCluster().getClusterName();
- } finally {
- readWriteLock.readLock().unlock();
- }
- } finally {
- clusterGlobalLock.readLock().unlock();
- }
+ return service.getCluster().getClusterName();
}
@Override
public void debugDump(StringBuilder sb) {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.readLock().lock();
try {
- readWriteLock.readLock().lock();
- try {
- sb.append("ServiceComponent={ serviceComponentName=" + getName()
- + ", clusterName=" + service.getCluster().getClusterName()
- + ", clusterId=" + service.getCluster().getClusterId()
- + ", serviceName=" + service.getName()
- + ", desiredStackVersion=" + getDesiredStackVersion()
- + ", desiredState=" + getDesiredState().toString()
- + ", hostcomponents=[ ");
- boolean first = true;
- for (ServiceComponentHost sch : hostComponents.values()) {
- if (!first) {
- sb.append(" , ");
- first = false;
- }
- sb.append("\n ");
- sch.debugDump(sb);
- sb.append(" ");
+ sb.append("ServiceComponent={ serviceComponentName=" + getName()
+ + ", clusterName=" + service.getCluster().getClusterName()
+ + ", clusterId=" + service.getCluster().getClusterId()
+ + ", serviceName=" + service.getName() + ", desiredStackVersion="
+ + getDesiredStackVersion() + ", desiredState="
+ + getDesiredState().toString() + ", hostcomponents=[ ");
+ boolean first = true;
+ for (ServiceComponentHost sch : hostComponents.values()) {
+ if (!first) {
+ sb.append(" , ");
+ first = false;
}
- sb.append(" ] }");
- } finally {
- readWriteLock.readLock().unlock();
+ sb.append("\n ");
+ sch.debugDump(sb);
+ sb.append(" ");
}
+ sb.append(" ] }");
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.readLock().unlock();
}
}
@@ -507,12 +429,22 @@ public class ServiceComponentImpl implements ServiceComponent {
@Override
public void persist() {
- clusterGlobalLock.readLock().lock();
+ boolean clusterWriteLockAcquired = false;
+ if (!persisted) {
+ clusterGlobalLock.writeLock().lock();
+ clusterWriteLockAcquired = true;
+ }
+
try {
readWriteLock.writeLock().lock();
try {
if (!persisted) {
+ // persist the new cluster topology and then release the cluster lock
+ // as it has no more bearing on the rest of this persist() method
persistEntities();
+ clusterGlobalLock.writeLock().unlock();
+ clusterWriteLockAcquired = false;
+
refresh();
service.refresh();
persisted = true;
@@ -523,7 +455,9 @@ public class ServiceComponentImpl implements ServiceComponent {
readWriteLock.writeLock().unlock();
}
} finally {
- clusterGlobalLock.readLock().unlock();
+ if (clusterWriteLockAcquired) {
+ clusterGlobalLock.writeLock().unlock();
+ }
}
}
@@ -542,52 +476,42 @@ public class ServiceComponentImpl implements ServiceComponent {
@Override
@Transactional
public void refresh() {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.writeLock().lock();
try {
- readWriteLock.writeLock().lock();
- try {
- if (isPersisted()) {
- ServiceComponentDesiredStateEntityPK pk = new ServiceComponentDesiredStateEntityPK();
- pk.setComponentName(getName());
- pk.setClusterId(getClusterId());
- pk.setServiceName(getServiceName());
- // TODO: desiredStateEntity is assigned in unway, may be a bug
- desiredStateEntity = serviceComponentDesiredStateDAO.findByPK(pk);
- serviceComponentDesiredStateDAO.refresh(desiredStateEntity);
- }
- } finally {
- readWriteLock.writeLock().unlock();
+ if (isPersisted()) {
+ ServiceComponentDesiredStateEntityPK pk = new ServiceComponentDesiredStateEntityPK();
+ pk.setComponentName(getName());
+ pk.setClusterId(getClusterId());
+ pk.setServiceName(getServiceName());
+ // TODO: desiredStateEntity is assigned in unway, may be a bug
+ desiredStateEntity = serviceComponentDesiredStateDAO.findByPK(pk);
+ serviceComponentDesiredStateDAO.refresh(desiredStateEntity);
}
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.writeLock().unlock();
}
}
@Transactional
private void saveIfPersisted() {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.writeLock().lock();
try {
- readWriteLock.writeLock().lock();
- try {
- if (isPersisted()) {
- serviceComponentDesiredStateDAO.merge(desiredStateEntity);
- }
- } finally {
- readWriteLock.writeLock().unlock();
+ if (isPersisted()) {
+ serviceComponentDesiredStateDAO.merge(desiredStateEntity);
}
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.writeLock().unlock();
}
}
@Override
public boolean isClientComponent() {
- return this.isClientComponent;
+ return isClientComponent;
}
@Override
public boolean isMasterComponent() {
- return this.isMasterComponent;
+ return isMasterComponent;
}
@Override
@@ -655,8 +579,6 @@ public class ServiceComponentImpl implements ServiceComponent {
} finally {
clusterGlobalLock.writeLock().unlock();
}
-
-
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/23d506e2/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
index 85e8314..0de62ea 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
@@ -160,46 +160,21 @@ public class ServiceImpl implements Service {
@Override
public String getName() {
- clusterGlobalLock.readLock().lock();
- try {
- readWriteLock.readLock().lock();
- try {
- return serviceEntity.getServiceName();
- } finally {
- readWriteLock.readLock().unlock();
- }
- } finally {
- clusterGlobalLock.readLock().unlock();
- }
+ return serviceEntity.getServiceName();
}
@Override
public long getClusterId() {
- clusterGlobalLock.readLock().lock();
- try {
- readWriteLock.readLock().lock();
- try {
- return cluster.getClusterId();
- } finally {
- readWriteLock.readLock().unlock();
- }
- } finally {
- clusterGlobalLock.readLock().unlock();
- }
+ return cluster.getClusterId();
}
@Override
public Map<String, ServiceComponent> getServiceComponents() {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.readLock().lock();
try {
- readWriteLock.readLock().lock();
- try {
- return new HashMap<String, ServiceComponent>(components);
- } finally {
- readWriteLock.readLock().unlock();
- }
+ return new HashMap<String, ServiceComponent>(components);
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.readLock().unlock();
}
}
@@ -282,176 +257,124 @@ public class ServiceImpl implements Service {
} finally {
clusterGlobalLock.writeLock().unlock();
}
-
-
}
@Override
public ServiceComponent getServiceComponent(String componentName)
throws AmbariException {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.readLock().lock();
try {
- readWriteLock.readLock().lock();
- try {
- if (!components.containsKey(componentName)) {
- throw new ServiceComponentNotFoundException(cluster.getClusterName(),
- getName(),
- componentName);
- }
- return components.get(componentName);
- } finally {
- readWriteLock.readLock().unlock();
+ if (!components.containsKey(componentName)) {
+ throw new ServiceComponentNotFoundException(cluster.getClusterName(),
+ getName(), componentName);
}
+ return components.get(componentName);
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.readLock().unlock();
}
-
-
}
@Override
public State getDesiredState() {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.readLock().lock();
try {
- readWriteLock.readLock().lock();
- try {
- return serviceDesiredStateEntity.getDesiredState();
- } finally {
- readWriteLock.readLock().unlock();
- }
+ return serviceDesiredStateEntity.getDesiredState();
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.readLock().unlock();
}
-
-
}
@Override
public void setDesiredState(State state) {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.writeLock().lock();
try {
- readWriteLock.writeLock().lock();
- try {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Setting DesiredState of Service"
- + ", clusterName=" + cluster.getClusterName()
- + ", clusterId=" + cluster.getClusterId()
- + ", serviceName=" + getName()
- + ", oldDesiredState=" + getDesiredState()
- + ", newDesiredState=" + state);
- }
- serviceDesiredStateEntity.setDesiredState(state);
- saveIfPersisted();
- } finally {
- readWriteLock.writeLock().unlock();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Setting DesiredState of Service" + ", clusterName="
+ + cluster.getClusterName() + ", clusterId="
+ + cluster.getClusterId() + ", serviceName=" + getName()
+ + ", oldDesiredState=" + getDesiredState() + ", newDesiredState="
+ + state);
}
+ serviceDesiredStateEntity.setDesiredState(state);
+ saveIfPersisted();
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.writeLock().unlock();
}
}
@Override
public SecurityState getSecurityState() {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.readLock().lock();
try {
- readWriteLock.readLock().lock();
- try {
- return serviceDesiredStateEntity.getSecurityState();
- } finally {
- readWriteLock.readLock().unlock();
- }
+ return serviceDesiredStateEntity.getSecurityState();
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.readLock().unlock();
}
}
@Override
public void setSecurityState(SecurityState securityState) throws AmbariException {
- if(!securityState.isEndpoint())
+ if(!securityState.isEndpoint()) {
throw new AmbariException("The security state must be an endpoint state");
+ }
- clusterGlobalLock.readLock().lock();
+ readWriteLock.writeLock().lock();
try {
- readWriteLock.writeLock().lock();
- try {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Setting DesiredSecurityState of Service"
- + ", clusterName=" + cluster.getClusterName()
- + ", clusterId=" + cluster.getClusterId()
- + ", serviceName=" + getName()
- + ", oldDesiredSecurityState=" + getSecurityState()
- + ", newDesiredSecurityState=" + securityState);
- }
- serviceDesiredStateEntity.setSecurityState(securityState);
- saveIfPersisted();
- } finally {
- readWriteLock.writeLock().unlock();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Setting DesiredSecurityState of Service" + ", clusterName="
+ + cluster.getClusterName() + ", clusterId="
+ + cluster.getClusterId() + ", serviceName=" + getName()
+ + ", oldDesiredSecurityState=" + getSecurityState()
+ + ", newDesiredSecurityState=" + securityState);
}
+ serviceDesiredStateEntity.setSecurityState(securityState);
+ saveIfPersisted();
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.writeLock().unlock();
}
}
@Override
public StackId getDesiredStackVersion() {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.readLock().lock();
try {
- readWriteLock.readLock().lock();
- try {
- return gson.fromJson(serviceDesiredStateEntity.getDesiredStackVersion(), StackId.class);
- } finally {
- readWriteLock.readLock().unlock();
- }
+ return gson.fromJson(serviceDesiredStateEntity.getDesiredStackVersion(),
+ StackId.class);
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.readLock().unlock();
}
}
@Override
public void setDesiredStackVersion(StackId stackVersion) {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.writeLock().lock();
try {
- readWriteLock.writeLock().lock();
- try {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Setting DesiredStackVersion of Service"
- + ", clusterName=" + cluster.getClusterName()
- + ", clusterId=" + cluster.getClusterId()
- + ", serviceName=" + getName()
- + ", oldDesiredStackVersion=" + getDesiredStackVersion()
- + ", newDesiredStackVersion=" + stackVersion);
- }
- serviceDesiredStateEntity.setDesiredStackVersion(gson.toJson(stackVersion));
- saveIfPersisted();
- } finally {
- readWriteLock.writeLock().unlock();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Setting DesiredStackVersion of Service" + ", clusterName="
+ + cluster.getClusterName() + ", clusterId="
+ + cluster.getClusterId() + ", serviceName=" + getName()
+ + ", oldDesiredStackVersion=" + getDesiredStackVersion()
+ + ", newDesiredStackVersion=" + stackVersion);
}
+ serviceDesiredStateEntity.setDesiredStackVersion(gson.toJson(stackVersion));
+ saveIfPersisted();
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.writeLock().unlock();
}
-
-
}
@Override
public ServiceResponse convertToResponse() {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.readLock().lock();
try {
- readWriteLock.readLock().lock();
- try {
- ServiceResponse r = new ServiceResponse(cluster.getClusterId(),
- cluster.getClusterName(),
- getName(),
- getDesiredStackVersion().getStackId(),
- getDesiredState().toString());
-
- r.setMaintenanceState(getMaintenanceState().name());
- return r;
- } finally {
- readWriteLock.readLock().unlock();
- }
+ ServiceResponse r = new ServiceResponse(cluster.getClusterId(),
+ cluster.getClusterName(), getName(),
+ getDesiredStackVersion().getStackId(), getDesiredState().toString());
+
+ r.setMaintenanceState(getMaintenanceState().name());
+ return r;
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.readLock().unlock();
}
}
@@ -462,32 +385,26 @@ public class ServiceImpl implements Service {
@Override
public void debugDump(StringBuilder sb) {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.readLock().lock();
try {
- readWriteLock.readLock().lock();
- try {
- sb.append("Service={ serviceName=" + getName()
- + ", clusterName=" + cluster.getClusterName()
- + ", clusterId=" + cluster.getClusterId()
- + ", desiredStackVersion=" + getDesiredStackVersion()
- + ", desiredState=" + getDesiredState().toString()
- + ", components=[ ");
- boolean first = true;
- for (ServiceComponent sc : components.values()) {
- if (!first) {
- sb.append(" , ");
- }
- first = false;
- sb.append("\n ");
- sc.debugDump(sb);
- sb.append(" ");
+ sb.append("Service={ serviceName=" + getName() + ", clusterName="
+ + cluster.getClusterName() + ", clusterId=" + cluster.getClusterId()
+ + ", desiredStackVersion=" + getDesiredStackVersion()
+ + ", desiredState=" + getDesiredState().toString()
+ + ", components=[ ");
+ boolean first = true;
+ for (ServiceComponent sc : components.values()) {
+ if (!first) {
+ sb.append(" , ");
}
- sb.append(" ] }");
- } finally {
- readWriteLock.readLock().unlock();
+ first = false;
+ sb.append("\n ");
+ sc.debugDump(sb);
+ sb.append(" ");
}
+ sb.append(" ] }");
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.readLock().unlock();
}
}
@@ -504,12 +421,11 @@ public class ServiceImpl implements Service {
} finally {
clusterGlobalLock.readLock().unlock();
}
-
}
@Override
public void persist() {
- clusterGlobalLock.readLock().lock();
+ clusterGlobalLock.writeLock().lock();
try {
readWriteLock.writeLock().lock();
try {
@@ -534,9 +450,8 @@ public class ServiceImpl implements Service {
readWriteLock.writeLock().unlock();
}
} finally {
- clusterGlobalLock.readLock().unlock();
+ clusterGlobalLock.writeLock().unlock();
}
-
}
@Transactional
@@ -564,27 +479,20 @@ public class ServiceImpl implements Service {
@Override
@Transactional
public void refresh() {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.writeLock().lock();
try {
- readWriteLock.writeLock().lock();
- try {
- if (isPersisted()) {
- ClusterServiceEntityPK pk = new ClusterServiceEntityPK();
- pk.setClusterId(getClusterId());
- pk.setServiceName(getName());
- serviceEntity = clusterServiceDAO.findByPK(pk);
- serviceDesiredStateEntity = serviceEntity.getServiceDesiredStateEntity();
- clusterServiceDAO.refresh(serviceEntity);
- serviceDesiredStateDAO.refresh(serviceDesiredStateEntity);
- }
- } finally {
- readWriteLock.writeLock().unlock();
+ if (isPersisted()) {
+ ClusterServiceEntityPK pk = new ClusterServiceEntityPK();
+ pk.setClusterId(getClusterId());
+ pk.setServiceName(getName());
+ serviceEntity = clusterServiceDAO.findByPK(pk);
+ serviceDesiredStateEntity = serviceEntity.getServiceDesiredStateEntity();
+ clusterServiceDAO.refresh(serviceEntity);
+ serviceDesiredStateDAO.refresh(serviceDesiredStateEntity);
}
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.writeLock().unlock();
}
-
-
}
@Override
@@ -613,8 +521,6 @@ public class ServiceImpl implements Service {
} finally {
clusterGlobalLock.readLock().unlock();
}
-
-
}
@Override
@@ -730,21 +636,16 @@ public class ServiceImpl implements Service {
@Override
public void setMaintenanceState(MaintenanceState state) {
- clusterGlobalLock.readLock().lock();
+ readWriteLock.writeLock().lock();
try {
- try {
- readWriteLock.writeLock().lock();
- serviceDesiredStateEntity.setMaintenanceState(state);
- saveIfPersisted();
+ serviceDesiredStateEntity.setMaintenanceState(state);
+ saveIfPersisted();
- // broadcast the maintenance mode change
- MaintenanceModeEvent event = new MaintenanceModeEvent(state, this);
- eventPublisher.publish(event);
- } finally {
- readWriteLock.writeLock().unlock();
- }
+ // broadcast the maintenance mode change
+ MaintenanceModeEvent event = new MaintenanceModeEvent(state, this);
+ eventPublisher.publish(event);
} finally {
- clusterGlobalLock.readLock().unlock();
+ readWriteLock.writeLock().unlock();
}
}
@@ -752,5 +653,4 @@ public class ServiceImpl implements Service {
public MaintenanceState getMaintenanceState() {
return serviceDesiredStateEntity.getMaintenanceState();
}
-
}