92 lines
3.1 KiB
Java
92 lines
3.1 KiB
Java
/*
|
|
* Title: CloudSim Toolkit
|
|
* Description: CloudSim (Cloud Simulation) Toolkit for Modeling and Simulation of Clouds
|
|
* Licence: GPL - http://www.gnu.org/copyleft/gpl.html
|
|
*
|
|
* Copyright (c) 2009-2012, The University of Melbourne, Australia
|
|
*/
|
|
|
|
package org.cloudbus.cloudsim.core;
|
|
|
|
import java.util.Calendar;
|
|
|
|
/**
|
|
* CloudimShutdown waits for termination of all CloudSim user entities to determine the end of
|
|
* simulation. This class will be created by CloudSim upon initialisation of the simulation, i.e.
|
|
* done via <tt>CloudSim.init()</tt> method. Hence, do not need to worry about creating an object of
|
|
* this class. This object signals the end of simulation to CloudInformationService (GIS) entity.
|
|
*
|
|
* @author Manzur Murshed
|
|
* @author Rajkumar Buyya
|
|
* @since CloudSim Toolkit 1.0
|
|
*/
|
|
public class CloudSimShutdown extends SimEntity {
|
|
|
|
/** The num user. */
|
|
private int numUser;
|
|
|
|
/**
|
|
* Allocates a new CloudSimShutdown object.
|
|
* <p>
|
|
* The total number of grid user entity plays an important role to determine whether all
|
|
* hostList should be shut down or not. If one or more users are still not finish, then the
|
|
* hostList will not be shut down. Therefore, it is important to give a correct number of total
|
|
* grid user entity. Otherwise, CloudSim program will hang or encounter a weird behaviour.
|
|
*
|
|
* @param name the name to be associated with this entity (as required by SimEntity class)
|
|
* @param numUser total number of grid user entity
|
|
* @throws Exception This happens when creating this entity before initialising CloudSim package
|
|
* or this entity name is <tt>null</tt> or empty
|
|
* @see gridsim.CloudSim#init(int, Calendar, boolean)
|
|
* @pre name != null
|
|
* @pre numUser >= 0
|
|
* @post $none
|
|
*/
|
|
public CloudSimShutdown(String name, int numUser) throws Exception {
|
|
// NOTE: This entity doesn't use any I/O port.
|
|
// super(name, CloudSimTags.DEFAULT_BAUD_RATE);
|
|
super(name);
|
|
this.numUser = numUser;
|
|
}
|
|
|
|
/**
|
|
* The main method that shuts down hostList and Cloud Information Service (GIS). In addition,
|
|
* this method writes down a report at the end of a simulation based on
|
|
* <tt>reportWriterName</tt> defined in the Constructor. <br>
|
|
* <b>NOTE:</b> This method shuts down grid hostList and GIS entities either <tt>AFTER</tt> all
|
|
* grid users have been shut down or an entity requires an abrupt end of the whole simulation.
|
|
* In the first case, the number of grid users given in the Constructor <tt>must</tt> be
|
|
* correct. Otherwise, CloudSim package hangs forever or it does not terminate properly.
|
|
*
|
|
* @param ev the ev
|
|
* @pre $none
|
|
* @post $none
|
|
*/
|
|
@Override
|
|
public void processEvent(SimEvent ev) {
|
|
numUser--;
|
|
if (numUser == 0 || ev.getTag() == CloudSimTags.ABRUPT_END_OF_SIMULATION) {
|
|
CloudSim.abruptallyTerminate();
|
|
}
|
|
}
|
|
|
|
/*
|
|
* (non-Javadoc)
|
|
* @see org.cloudbus.cloudsim.core.SimEntity#startEntity()
|
|
*/
|
|
@Override
|
|
public void startEntity() {
|
|
// do nothing
|
|
}
|
|
|
|
/*
|
|
* (non-Javadoc)
|
|
* @see org.cloudbus.cloudsim.core.SimEntity#shutdownEntity()
|
|
*/
|
|
@Override
|
|
public void shutdownEntity() {
|
|
// do nothing
|
|
}
|
|
|
|
}
|