/*************************************************************************** * Copyright (c) 2013-2015 VMware, Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ***************************************************************************/ package com.vmware.bdd.manager; import com.vmware.bdd.manager.concurrent.AsyncExecutors; import com.vmware.bdd.service.impl.ClusterSyncService; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import com.vmware.bdd.aop.annotation.ClusterEntityConcurrentWriteLock; import com.vmware.bdd.manager.intf.IClusterEntityManager; import com.vmware.bdd.manager.intf.IConcurrentLockedClusterEntityManager; import com.vmware.bdd.software.mgmt.plugin.monitor.ClusterReport; import com.vmware.bdd.software.mgmt.thrift.OperationStatusWithDetail; @Component public class ConcurrentWriteLockedClusterEntityManager implements IConcurrentLockedClusterEntityManager { private static final Logger logger = Logger.getLogger(ConcurrentWriteLockedClusterEntityManager.class); private IClusterEntityManager clusterEntityMgr; @Autowired private ClusterSyncService clusterSyncService; public IClusterEntityManager getClusterEntityMgr() { return clusterEntityMgr; } @Autowired public void setClusterEntityMgr(IClusterEntityManager clusterEntityMgr) { this.clusterEntityMgr = clusterEntityMgr; } @Override @ClusterEntityConcurrentWriteLock public boolean handleOperationStatus(String clusterName, OperationStatusWithDetail status, boolean lastUpdate) { return clusterEntityMgr.handleOperationStatus(clusterName, status, lastUpdate); } @Override @ClusterEntityConcurrentWriteLock public void syncUp(String clusterName, boolean updateClusterStatus) { logger.info("syncup cluster: " + clusterName); clusterSyncService.syncUp(clusterName, updateClusterStatus); } @Override @ClusterEntityConcurrentWriteLock @Async(AsyncExecutors.CLUSTER_SYNC_EXEC) public void asyncSyncUp(String clusterName, boolean updateClusterStatus) { logger.info("async syncup cluster: " + clusterName); clusterSyncService.syncUp(clusterName, updateClusterStatus); } @Override @ClusterEntityConcurrentWriteLock public void removeVmReference(String clusterName, String vmId) { clusterEntityMgr.removeVmReference(vmId); } @Override @ClusterEntityConcurrentWriteLock public void syncUpNode(String clusterName, String nodeName) { clusterEntityMgr.syncUpNode(clusterName, nodeName); } @Override @ClusterEntityConcurrentWriteLock public void refreshNodeByMobId(String clusterName, String vmId, boolean inSession) { clusterEntityMgr.refreshNodeByMobId(vmId, inSession); } @Override @ClusterEntityConcurrentWriteLock public void setNodeConnectionState(String clusterName, String vmName) { clusterEntityMgr.setNodeConnectionState(vmName); } @Override @ClusterEntityConcurrentWriteLock public void refreshNodeByMobId(String clusterName, String vmId, String action, boolean inSession) { clusterEntityMgr.refreshNodeByMobId(vmId, action, inSession); } @Override @ClusterEntityConcurrentWriteLock public void refreshNodeByVmName(String clusterName, String vmId, String vmName, boolean inSession) { clusterEntityMgr.refreshNodeByVmName(vmId, vmName, inSession); } @Override @ClusterEntityConcurrentWriteLock public void refreshNodeByVmName(String clusterName, String vmId, String vmName, String nodeAction, boolean inSession) { clusterEntityMgr.refreshNodeByVmName(vmId, vmName, nodeAction, inSession); } @Override public boolean handleOperationStatus(String clusterName, ClusterReport report, boolean lastUpdate) { return clusterEntityMgr.handleOperationStatus(clusterName, report, lastUpdate); } }