mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	SimulatorSecondaryDiscoverer implements the resource protocol to recieve
resource state transition events related to secondary storage VM from the ResourceManager.
This commit is contained in:
		
							parent
							
								
									f2241bfef6
								
							
						
					
					
						commit
						58b53f0d3c
					
				@ -263,12 +263,13 @@ public class MockAgentManagerImpl implements MockAgentManager {
 | 
				
			|||||||
                AgentStorageResource storageResource = new AgentStorageResource();
 | 
					                AgentStorageResource storageResource = new AgentStorageResource();
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    Map<String, Object> params =  new HashMap<String, Object>();
 | 
					                    Map<String, Object> params =  new HashMap<String, Object>();
 | 
				
			||||||
 | 
					                    Map<String, String> details = new HashMap<String, String>();
 | 
				
			||||||
                    params.put("guid", this.guid);
 | 
					                    params.put("guid", this.guid);
 | 
				
			||||||
 | 
					                    details.put("guid", this.guid);
 | 
				
			||||||
                    storageResource.configure("secondaryStorage", params);
 | 
					                    storageResource.configure("secondaryStorage", params);
 | 
				
			||||||
                    storageResource.start();
 | 
					                    storageResource.start();
 | 
				
			||||||
                    StartupCommand[] cmds = storageResource.initialize();
 | 
					 | 
				
			||||||
                    //on the simulator the ssvm is as good as a direct agent
 | 
					                    //on the simulator the ssvm is as good as a direct agent
 | 
				
			||||||
                    _resourceMgr.addHost(mockHost.getDataCenterId(), storageResource, Host.Type.SecondaryStorageVM, null);
 | 
					                    _resourceMgr.addHost(mockHost.getDataCenterId(), storageResource, Host.Type.SecondaryStorageVM, details);
 | 
				
			||||||
                    _resources.put(this.guid, storageResource);
 | 
					                    _resources.put(this.guid, storageResource);
 | 
				
			||||||
                } catch (ConfigurationException e) {
 | 
					                } catch (ConfigurationException e) {
 | 
				
			||||||
                    s_logger.debug("Failed to load secondary storage resource: " + e.toString());
 | 
					                    s_logger.debug("Failed to load secondary storage resource: " + e.toString());
 | 
				
			||||||
 | 
				
			|||||||
@ -68,7 +68,7 @@ public class AgentStorageResource extends AgentResourceBase implements Secondary
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public StartupCommand[] initialize() {
 | 
					    public StartupCommand[] initialize() {
 | 
				
			||||||
    	StartupStorageCommand cmd = new StartupStorageCommand();
 | 
					    	StartupSecondaryStorageCommand cmd = new StartupSecondaryStorageCommand();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cmd.setPrivateIpAddress(agentHost.getPrivateIpAddress());
 | 
					        cmd.setPrivateIpAddress(agentHost.getPrivateIpAddress());
 | 
				
			||||||
        cmd.setPrivateNetmask(agentHost.getPrivateNetMask());
 | 
					        cmd.setPrivateNetmask(agentHost.getPrivateNetMask());
 | 
				
			||||||
 | 
				
			|||||||
@ -307,7 +307,6 @@ public class SimulatorDiscoverer extends DiscovererBase implements Discoverer, L
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public HostVO createHostVOForConnectedAgent(HostVO host,
 | 
						public HostVO createHostVOForConnectedAgent(HostVO host,
 | 
				
			||||||
			StartupCommand[] cmd) {
 | 
								StartupCommand[] cmd) {
 | 
				
			||||||
		// TODO Auto-generated method stub
 | 
					 | 
				
			||||||
		return null;
 | 
							return null;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -331,7 +330,6 @@ public class SimulatorDiscoverer extends DiscovererBase implements Discoverer, L
 | 
				
			|||||||
	@Override
 | 
						@Override
 | 
				
			||||||
	public DeleteHostAnswer deleteHost(HostVO host, boolean isForced,
 | 
						public DeleteHostAnswer deleteHost(HostVO host, boolean isForced,
 | 
				
			||||||
			boolean isForceDeleteStorage) throws UnableDeleteHostException {
 | 
								boolean isForceDeleteStorage) throws UnableDeleteHostException {
 | 
				
			||||||
		// TODO Auto-generated method stub
 | 
					 | 
				
			||||||
		return null;
 | 
							return null;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
				
			|||||||
@ -6,17 +6,34 @@ import java.util.Map;
 | 
				
			|||||||
import javax.ejb.Local;
 | 
					import javax.ejb.Local;
 | 
				
			||||||
import javax.naming.ConfigurationException;
 | 
					import javax.naming.ConfigurationException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.cloud.agent.AgentManager;
 | 
				
			||||||
 | 
					import com.cloud.agent.Listener;
 | 
				
			||||||
 | 
					import com.cloud.agent.api.AgentControlAnswer;
 | 
				
			||||||
 | 
					import com.cloud.agent.api.AgentControlCommand;
 | 
				
			||||||
 | 
					import com.cloud.agent.api.Answer;
 | 
				
			||||||
 | 
					import com.cloud.agent.api.Command;
 | 
				
			||||||
 | 
					import com.cloud.agent.api.StartupCommand;
 | 
				
			||||||
 | 
					import com.cloud.agent.api.StartupSecondaryStorageCommand;
 | 
				
			||||||
import com.cloud.agent.manager.MockStorageManager;
 | 
					import com.cloud.agent.manager.MockStorageManager;
 | 
				
			||||||
 | 
					import com.cloud.exception.ConnectionException;
 | 
				
			||||||
import com.cloud.host.HostVO;
 | 
					import com.cloud.host.HostVO;
 | 
				
			||||||
 | 
					import com.cloud.host.Status;
 | 
				
			||||||
 | 
					import com.cloud.storage.SnapshotVO;
 | 
				
			||||||
 | 
					import com.cloud.storage.dao.SnapshotDao;
 | 
				
			||||||
import com.cloud.storage.secondary.SecondaryStorageDiscoverer;
 | 
					import com.cloud.storage.secondary.SecondaryStorageDiscoverer;
 | 
				
			||||||
import com.cloud.utils.component.Inject;
 | 
					import com.cloud.utils.component.Inject;
 | 
				
			||||||
 | 
					import com.cloud.utils.exception.CloudRuntimeException;
 | 
				
			||||||
@Local(value=Discoverer.class)
 | 
					@Local(value=Discoverer.class)
 | 
				
			||||||
public class SimulatorSecondaryDiscoverer extends SecondaryStorageDiscoverer {
 | 
					public class SimulatorSecondaryDiscoverer extends SecondaryStorageDiscoverer implements ResourceStateAdapter, Listener {
 | 
				
			||||||
    @Inject
 | 
					    @Inject MockStorageManager _mockStorageMgr = null;
 | 
				
			||||||
    MockStorageManager _mockStorageMgr = null;
 | 
					    @Inject AgentManager _agentMgr;
 | 
				
			||||||
 | 
					    @Inject ResourceManager _resourceMgr;
 | 
				
			||||||
 | 
					    @Inject SnapshotDao _snapshotDao;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
 | 
					    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
 | 
				
			||||||
 | 
					    	_agentMgr.registerForHostEvents(this, true, false, false);
 | 
				
			||||||
 | 
					        _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
 | 
				
			||||||
        return super.configure(name, params);
 | 
					        return super.configure(name, params);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@ -27,4 +44,92 @@ public class SimulatorSecondaryDiscoverer extends SecondaryStorageDiscoverer {
 | 
				
			|||||||
            _mockStorageMgr.preinstallTemplates(host.getStorageUrl(), host.getDataCenterId());
 | 
					            _mockStorageMgr.preinstallTemplates(host.getStorageUrl(), host.getDataCenterId());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public HostVO createHostVOForConnectedAgent(HostVO host,
 | 
				
			||||||
 | 
								StartupCommand[] cmd) {
 | 
				
			||||||
 | 
							return null;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public HostVO createHostVOForDirectConnectAgent(HostVO host,
 | 
				
			||||||
 | 
								StartupCommand[] startup, ServerResource resource,
 | 
				
			||||||
 | 
								Map<String, String> details, List<String> hostTags) {
 | 
				
			||||||
 | 
							//for detecting SSVM dispatch
 | 
				
			||||||
 | 
							StartupCommand firstCmd = startup[0];
 | 
				
			||||||
 | 
						    if (!(firstCmd instanceof StartupSecondaryStorageCommand)) {
 | 
				
			||||||
 | 
						    	return null;
 | 
				
			||||||
 | 
						    }
 | 
				
			||||||
 | 
						    
 | 
				
			||||||
 | 
							host.setType(com.cloud.host.Host.Type.SecondaryStorageVM);
 | 
				
			||||||
 | 
							return host;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public DeleteHostAnswer deleteHost(HostVO host, boolean isForced,
 | 
				
			||||||
 | 
								boolean isForceDeleteStorage) throws UnableDeleteHostException {
 | 
				
			||||||
 | 
							long hostId = host.getId();
 | 
				
			||||||
 | 
							List<SnapshotVO> snapshots = _snapshotDao.listByHostId(hostId);
 | 
				
			||||||
 | 
							if (snapshots != null && !snapshots.isEmpty()) {
 | 
				
			||||||
 | 
								throw new CloudRuntimeException("Cannot delete this secondary storage because there are still snapshots on it ");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							_vmTemplateHostDao.deleteByHost(hostId);
 | 
				
			||||||
 | 
							host.setGuid(null);
 | 
				
			||||||
 | 
							_hostDao.update(hostId, host);
 | 
				
			||||||
 | 
							_hostDao.remove(hostId);
 | 
				
			||||||
 | 
							return new DeleteHostAnswer(true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public boolean start() {
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public boolean stop() {
 | 
				
			||||||
 | 
					    	_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public int getTimeout() {
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean isRecurring() {
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean processAnswers(long agentId, long seq, Answer[] answers) {
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean processCommands(long agentId, long seq, Command[] commands) {
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public void processConnect(HostVO host, StartupCommand cmd,
 | 
				
			||||||
 | 
								boolean forRebalance) throws ConnectionException {
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public AgentControlAnswer processControlCommand(long agentId,
 | 
				
			||||||
 | 
								AgentControlCommand cmd) {
 | 
				
			||||||
 | 
							return null;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean processDisconnect(long agentId, Status state) {
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public boolean processTimeout(long agentId, long seq) {
 | 
				
			||||||
 | 
							return false;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user