mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-03 04:12:31 +01:00
check hypervisorType and StoragePoolType in OCFS2 manager when delete host
don't take lock in processResourceEvent()
This commit is contained in:
parent
6b33d114e8
commit
71385f7cc0
@ -180,44 +180,44 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void processResourceEvent(Integer event, Object...params) {
|
protected void processResourceEvent(Integer event, Object...params) {
|
||||||
synchronized (_lifeCycleListeners) {
|
List<ResourceListener> lst = _lifeCycleListeners.get(event);
|
||||||
List<ResourceListener> lst = _lifeCycleListeners.get(event);
|
if (lst == null || lst.size() == 0) {
|
||||||
if (lst == null || lst.size() == 0) {
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String eventName;
|
|
||||||
for (ResourceListener l : lst) {
|
|
||||||
if (event == ResourceListener.EVENT_DISCOVER_BEFORE) {
|
|
||||||
l.processDiscoverEventBefore((Long)params[0], (Long)params[1], (Long)params[2], (URI)params[3], (String)params[4], (String)params[5], (List<String>)params[6]);
|
|
||||||
eventName = "EVENT_DISCOVER_BEFORE";
|
|
||||||
} else if (event == ResourceListener.EVENT_DISCOVER_AFTER) {
|
|
||||||
l.processDiscoverEventAfter((Map<? extends ServerResource, Map<String, String>>)params[0]);
|
|
||||||
eventName = "EVENT_DISCOVER_AFTER";
|
|
||||||
} else if (event == ResourceListener.EVENT_DELETE_HOST_BEFORE) {
|
|
||||||
l.processDeleteHostEventBefore((HostVO)params[0]);
|
|
||||||
eventName = "EVENT_DELETE_HOST_BEFORE";
|
|
||||||
} else if (event == ResourceListener.EVENT_DELETE_HOST_AFTER) {
|
|
||||||
l.processDeletHostEventAfter((HostVO)params[0]);
|
|
||||||
eventName = "EVENT_DELETE_HOST_AFTER";
|
|
||||||
} else if (event == ResourceListener.EVENT_CANCEL_MAINTENANCE_BEFORE) {
|
|
||||||
l.processCancelMaintenaceEventBefore((Long)params[0]);
|
|
||||||
eventName = "EVENT_CANCEL_MAINTENANCE_BEFORE";
|
|
||||||
} else if (event == ResourceListener.EVENT_CANCEL_MAINTENANCE_AFTER) {
|
|
||||||
l.processCancelMaintenaceEventAfter((Long)params[0]);
|
|
||||||
eventName = "EVENT_CANCEL_MAINTENANCE_AFTER";
|
|
||||||
} else if (event == ResourceListener.EVENT_PREPARE_MAINTENANCE_BEFORE) {
|
|
||||||
l.processPrepareMaintenaceEventBefore((Long)params[0]);
|
|
||||||
eventName = "EVENT_PREPARE_MAINTENANCE_BEFORE";
|
|
||||||
} else if (event == ResourceListener.EVENT_PREPARE_MAINTENANCE_AFTER) {
|
|
||||||
l.processPrepareMaintenaceEventAfter((Long)params[0]);
|
|
||||||
eventName = "EVENT_PREPARE_MAINTENANCE_AFTER";
|
|
||||||
} else {
|
|
||||||
throw new CloudRuntimeException("Unknown resource event:" + event);
|
|
||||||
}
|
|
||||||
s_logger.debug("Sent resource event " + eventName + " to listener " + l.getClass().getSimpleName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String eventName;
|
||||||
|
for (ResourceListener l : lst) {
|
||||||
|
if (event == ResourceListener.EVENT_DISCOVER_BEFORE) {
|
||||||
|
l.processDiscoverEventBefore((Long) params[0], (Long) params[1], (Long) params[2], (URI) params[3], (String) params[4], (String) params[5],
|
||||||
|
(List<String>) params[6]);
|
||||||
|
eventName = "EVENT_DISCOVER_BEFORE";
|
||||||
|
} else if (event == ResourceListener.EVENT_DISCOVER_AFTER) {
|
||||||
|
l.processDiscoverEventAfter((Map<? extends ServerResource, Map<String, String>>) params[0]);
|
||||||
|
eventName = "EVENT_DISCOVER_AFTER";
|
||||||
|
} else if (event == ResourceListener.EVENT_DELETE_HOST_BEFORE) {
|
||||||
|
l.processDeleteHostEventBefore((HostVO) params[0]);
|
||||||
|
eventName = "EVENT_DELETE_HOST_BEFORE";
|
||||||
|
} else if (event == ResourceListener.EVENT_DELETE_HOST_AFTER) {
|
||||||
|
l.processDeletHostEventAfter((HostVO) params[0]);
|
||||||
|
eventName = "EVENT_DELETE_HOST_AFTER";
|
||||||
|
} else if (event == ResourceListener.EVENT_CANCEL_MAINTENANCE_BEFORE) {
|
||||||
|
l.processCancelMaintenaceEventBefore((Long) params[0]);
|
||||||
|
eventName = "EVENT_CANCEL_MAINTENANCE_BEFORE";
|
||||||
|
} else if (event == ResourceListener.EVENT_CANCEL_MAINTENANCE_AFTER) {
|
||||||
|
l.processCancelMaintenaceEventAfter((Long) params[0]);
|
||||||
|
eventName = "EVENT_CANCEL_MAINTENANCE_AFTER";
|
||||||
|
} else if (event == ResourceListener.EVENT_PREPARE_MAINTENANCE_BEFORE) {
|
||||||
|
l.processPrepareMaintenaceEventBefore((Long) params[0]);
|
||||||
|
eventName = "EVENT_PREPARE_MAINTENANCE_BEFORE";
|
||||||
|
} else if (event == ResourceListener.EVENT_PREPARE_MAINTENANCE_AFTER) {
|
||||||
|
l.processPrepareMaintenaceEventAfter((Long) params[0]);
|
||||||
|
eventName = "EVENT_PREPARE_MAINTENANCE_AFTER";
|
||||||
|
} else {
|
||||||
|
throw new CloudRuntimeException("Unknown resource event:" + event);
|
||||||
|
}
|
||||||
|
s_logger.debug("Sent resource event " + eventName + " to listener " + l.getClass().getSimpleName());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -19,10 +19,13 @@ import com.cloud.dc.dao.ClusterDao;
|
|||||||
import com.cloud.host.Host;
|
import com.cloud.host.Host;
|
||||||
import com.cloud.host.HostVO;
|
import com.cloud.host.HostVO;
|
||||||
import com.cloud.host.dao.HostDao;
|
import com.cloud.host.dao.HostDao;
|
||||||
|
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||||
import com.cloud.resource.ResourceListener;
|
import com.cloud.resource.ResourceListener;
|
||||||
import com.cloud.resource.ResourceManager;
|
import com.cloud.resource.ResourceManager;
|
||||||
import com.cloud.resource.ServerResource;
|
import com.cloud.resource.ServerResource;
|
||||||
import com.cloud.storage.Storage.StoragePoolType;
|
import com.cloud.storage.Storage.StoragePoolType;
|
||||||
|
import com.cloud.storage.dao.StoragePoolDao;
|
||||||
|
import com.cloud.storage.dao.StoragePoolHostDao;
|
||||||
import com.cloud.utils.Ternary;
|
import com.cloud.utils.Ternary;
|
||||||
import com.cloud.utils.component.Inject;
|
import com.cloud.utils.component.Inject;
|
||||||
import com.cloud.utils.exception.CloudRuntimeException;
|
import com.cloud.utils.exception.CloudRuntimeException;
|
||||||
@ -37,6 +40,8 @@ public class OCFS2ManagerImpl implements OCFS2Manager, ResourceListener {
|
|||||||
@Inject HostDao _hostDao;
|
@Inject HostDao _hostDao;
|
||||||
@Inject ClusterDao _clusterDao;
|
@Inject ClusterDao _clusterDao;
|
||||||
@Inject ResourceManager _resourceMgr;
|
@Inject ResourceManager _resourceMgr;
|
||||||
|
@Inject StoragePoolHostDao _poolHostDao;
|
||||||
|
@Inject StoragePoolDao _poolDao;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
|
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
|
||||||
@ -106,16 +111,6 @@ public class OCFS2ManagerImpl implements OCFS2Manager, ResourceListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return clusterName;
|
return clusterName;
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* right now let's use "ocfs2" that is default cluster name of OVM OCFS2 service.
|
|
||||||
* Using another name is fine but requires extra effort to modify OVM's "utils/config_o2cb.sh",
|
|
||||||
* currently it doesn't receive parameter specifying which cluster to start.
|
|
||||||
* And I don't see the benefit of a cluster name rather than "ocfs2"
|
|
||||||
*/
|
|
||||||
|
|
||||||
//return "ocfs2";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -164,14 +159,30 @@ public class OCFS2ManagerImpl implements OCFS2Manager, ResourceListener {
|
|||||||
@Override
|
@Override
|
||||||
public void processDeletHostEventAfter(HostVO host) {
|
public void processDeletHostEventAfter(HostVO host) {
|
||||||
String errMsg = String.format("Prepare OCFS2 nodes failed after delete host %1$s (zone:%2$s, pod:%3$s, cluster:%4$s", host.getId(), host.getDataCenterId(), host.getPodId(), host.getClusterId());
|
String errMsg = String.format("Prepare OCFS2 nodes failed after delete host %1$s (zone:%2$s, pod:%3$s, cluster:%4$s", host.getId(), host.getDataCenterId(), host.getPodId(), host.getClusterId());
|
||||||
try {
|
|
||||||
if (!prepareNodes(host.getClusterId())) {
|
if (host.getHypervisorType() != HypervisorType.Ovm) {
|
||||||
s_logger.warn(errMsg);
|
return;
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
s_logger.error(errMsg, e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean hasOcfs2 = false;
|
||||||
|
List<StoragePoolHostVO> poolRefs = _poolHostDao.listByHostId(host.getId());
|
||||||
|
for (StoragePoolHostVO poolRef : poolRefs) {
|
||||||
|
StoragePoolVO pool = _poolDao.findById(poolRef.getPoolId());
|
||||||
|
if (pool.getPoolType() == StoragePoolType.OCFS2) {
|
||||||
|
hasOcfs2 = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasOcfs2) {
|
||||||
|
try {
|
||||||
|
if (!prepareNodes(host.getClusterId())) {
|
||||||
|
s_logger.warn(errMsg);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
s_logger.error(errMsg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user