Commit 1c980a4e authored by rodrigo.calheiros's avatar rodrigo.calheiros

CloudSin version String updated to 3.0.

parent 6ef9f1ed
......@@ -30,25 +30,25 @@ import org.cloudbus.cloudsim.core.predicates.PredicateNone;
* such file are mapped to CloudSim entities. Delay calculated from the BRITE
* model are added to the messages send through CloudSim. Messages using the old
* model are converted to the apropriate methods with the correct parameters.
*
* @author Rodrigo N. Calheiros
* @author Anton Beloglazov
* @since CloudSim Toolkit 1.0
*
* @author Rodrigo N. Calheiros
* @author Anton Beloglazov
* @since CloudSim Toolkit 1.0
*/
public class CloudSim {
/** The Constant CLOUDSIM_VERSION_STRING. */
private static final String CLOUDSIM_VERSION_STRING = "2.1.1";
private static final String CLOUDSIM_VERSION_STRING = "3.0";
/** The id of CIS entity. */
private static int cisId = -1;
/** The id of CloudSimShutdown entity. */
@SuppressWarnings("unused")
private static int shutdownId = -1;
private static int shutdownId = -1;
/** The CIS object. */
private static CloudInformationService cis = null;
private static CloudInformationService cis = null;
/** The Constant NOT_FOUND. */
private static final int NOT_FOUND = -1;
......@@ -59,22 +59,28 @@ public class CloudSim {
/** The calendar. */
private static Calendar calendar = null;
/** The termination time. */
private static double terminateAt = -1;
private static double terminateAt = -1;
/**
* Initialises all the common attributes.
*
* @param _calendar the _calendar
* @param _traceFlag the _trace flag
* @param numUser number of users
* @throws Exception This happens when creating this entity before initialising
* CloudSim package or this entity name is <tt>null</tt> or empty
*
* @param _calendar
* the _calendar
* @param _traceFlag
* the _trace flag
* @param numUser
* number of users
* @throws Exception
* This happens when creating this entity before initialising
* CloudSim package or this entity name is <tt>null</tt> or
* empty
* @pre $none
* @post $none
*/
private static void initCommonVariable(Calendar _calendar, boolean _traceFlag, int numUser) throws Exception {
private static void initCommonVariable(Calendar _calendar, boolean _traceFlag, int numUser)
throws Exception {
initialize();
// NOTE: the order for the below 3 lines are important
traceFlag = _traceFlag;
......@@ -102,16 +108,19 @@ public class CloudSim {
* <li>CloudSimShutdown
* </ul>
* <p>
*
* @param numUser the number of User Entities created. This parameters indicates
* that {@link gridsim.CloudSimShutdown} first waits for all user
* entities's END_OF_SIMULATION signal before issuing terminate
* signal to other entities
* @param cal starting time for this simulation. If it is <tt>null</tt>,
* then the time will be taken from
* <tt>Calendar.getInstance()</tt>
* @param traceFlag <tt>true</tt> if CloudSim trace need to be written
*
*
* @param numUser
* the number of User Entities created. This parameters indicates
* that {@link gridsim.CloudSimShutdown} first waits for all user
* entities's END_OF_SIMULATION signal before issuing terminate
* signal to other entities
* @param cal
* starting time for this simulation. If it is <tt>null</tt>,
* then the time will be taken from
* <tt>Calendar.getInstance()</tt>
* @param traceFlag
* <tt>true</tt> if CloudSim trace need to be written
*
* @see gridsim.CloudSimShutdown
* @see CloudInformationService.CloudInformationService
* @pre numUser >= 0
......@@ -142,11 +151,12 @@ public class CloudSim {
* <p>
* <b>Note</b>: This method should be called after all the entities have
* been setup and added.
*
*
* @return the double
* @throws NullPointerException This happens when creating this entity before initialising
* CloudSim package or this entity name is <tt>null</tt> or
* empty.
* @throws NullPointerException
* 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 $none
* @post $none
......@@ -175,10 +185,12 @@ public class CloudSim {
* Stops Cloud Simulation (based on {@link Simulation#runStop()}). This
* should be only called if any of the user defined entities
* <b>explicitly</b> want to terminate simulation during execution.
*
* @throws NullPointerException This happens when creating this entity before initialising
* CloudSim package or this entity name is <tt>null</tt> or empty
*
*
* @throws NullPointerException
* 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)
* @see Simulation#runStop()
* @pre $none
......@@ -192,10 +204,10 @@ public class CloudSim {
+ "Error - can't stop Cloud Simulation.");
}
}
/**
* This method is called if one wants to terminate the simulation.
*
*
* @return true, if successful; false otherwise.
*/
public static boolean terminateSimulation() {
......@@ -205,12 +217,12 @@ public class CloudSim {
}
/**
* This method is called if one wants to terminate the simulation at a
* given time.
*
* @param time the time at which the simulation has to be terminated
* @return true, if successful
* otherwise.
* This method is called if one wants to terminate the simulation at a given
* time.
*
* @param time
* the time at which the simulation has to be terminated
* @return true, if successful otherwise.
*/
public static boolean terminateSimulation(double time) {
if (time <= clock) {
......@@ -223,11 +235,11 @@ public class CloudSim {
/**
* Gets a new copy of initial simulation Calendar.
*
* @return a new copy of Calendar object or if CloudSim hasn't
* been initialized
*
* @return a new copy of Calendar object or if CloudSim hasn't been
* initialized
* @see gridsim.CloudSim#init(int, Calendar, boolean, String[], String[],
* String)
* String)
* @see gridsim.CloudSim#init(int, Calendar, boolean)
* @pre $none
* @post $none
......@@ -244,8 +256,8 @@ public class CloudSim {
/**
* Gets the entity ID of <tt>CloudInformationService</tt>.
*
* @return the Entity ID or if it is not found
*
* @return the Entity ID or if it is not found
* @pre $none
* @post $result >= -1
*/
......@@ -256,9 +268,9 @@ public class CloudSim {
/**
* Sends a request to Cloud Information Service (GIS) entity to get the list
* of all Cloud hostList.
*
* @return A List containing CloudResource ID (as an Integer object)
* or if a CIS entity hasn't been created before
*
* @return A List containing CloudResource ID (as an Integer object) or if a
* CIS entity hasn't been created before
* @pre $none
* @post $none
*/
......@@ -276,13 +288,13 @@ public class CloudSim {
private static List<SimEntity> entities;
/** The future event queue. */
protected static FutureQueue future;
protected static FutureQueue future;
/** The deferred event queue. */
protected static DeferredQueue deferred;
protected static DeferredQueue deferred;
/** The simulation clock. */
private static double clock;
private static double clock;
/** Flag for checking if the simulation is running. */
private static boolean running;
......@@ -330,7 +342,7 @@ public class CloudSim {
/**
* Get the current simulation time.
*
*
* @return the simulation time
*/
public static double clock() {
......@@ -339,7 +351,7 @@ public class CloudSim {
/**
* Get the current number of entities in the simulation.
*
*
* @return The number of entities
*/
public static int getNumEntities() {
......@@ -348,9 +360,10 @@ public class CloudSim {
/**
* Get the entity with a given id.
*
* @param id the entity's unique id number
* @return The entity, or if it could not be found
*
* @param id
* the entity's unique id number
* @return The entity, or if it could not be found
*/
public static SimEntity getEntity(int id) {
return entities.get(id);
......@@ -358,8 +371,9 @@ public class CloudSim {
/**
* Get the entity with a given name.
*
* @param name The entity's name
*
* @param name
* The entity's name
* @return The entity
*/
public static SimEntity getEntity(String name) {
......@@ -368,8 +382,9 @@ public class CloudSim {
/**
* Get the id of an entity with a given name.
*
* @param name The entity's name
*
* @param name
* The entity's name
* @return The entity's unique id number
*/
public static int getEntityId(String name) {
......@@ -383,9 +398,10 @@ public class CloudSim {
/**
* Gets name of the entity given its entity ID.
*
* @param entityID the entity ID
* @return the Entity name or if this object does not have one
*
* @param entityID
* the entity ID
* @return the Entity name or if this object does not have one
* @pre entityID > 0
* @post $none
*/
......@@ -401,9 +417,10 @@ public class CloudSim {
/**
* Gets name of the entity given its entity ID.
*
* @param entityID the entity ID
* @return the Entity name or if this object does not have one
*
* @param entityID
* the entity ID
* @return the Entity name or if this object does not have one
* @pre entityID > 0
* @post $none
*/
......@@ -416,7 +433,7 @@ public class CloudSim {
/**
* Returns a list of entities created for the simulation.
*
*
* @return the entity iterator
*/
public static List<SimEntity> getEntityList() {
......@@ -433,8 +450,9 @@ public class CloudSim {
* Add a new entity to the simulation. This is present for compatibility
* with existing simulations since entities are automatically added to the
* simulation upon instantiation.
*
* @param e The new entity
*
* @param e
* The new entity
*/
public static void addEntity(SimEntity e) {
SimEvent evt;
......@@ -455,8 +473,9 @@ public class CloudSim {
* Internal method used to add a new entity to the simulation when the
* simulation is running. It should <b>not</b> be called from user
* simulations.
*
* @param e The new entity
*
* @param e
* The new entity
*/
protected static void addEntityDynamically(SimEntity e) {
if (e == null) {
......@@ -470,9 +489,8 @@ public class CloudSim {
/**
* Internal method used to run one tick of the simulation. This method
* should <b>not</b> be called in simulations.
*
* @return true, if successful
* otherwise
*
* @return true, if successful otherwise
*/
public static boolean runClockTick() {
SimEntity ent;
......@@ -531,9 +549,11 @@ public class CloudSim {
/**
* Used to hold an entity for some time.
*
* @param src the src
* @param delay the delay
*
* @param src
* the src
* @param delay
* the delay
*/
public static void hold(int src, long delay) {
SimEvent e = new SimEvent(SimEvent.HOLD_DONE, clock + delay, src);
......@@ -543,9 +563,11 @@ public class CloudSim {
/**
* Used to pause an entity for some time.
*
* @param src the src
* @param delay the delay
*
* @param src
* the src
* @param delay
* the delay
*/
public static void pause(int src, double delay) {
SimEvent e = new SimEvent(SimEvent.HOLD_DONE, clock + delay, src);
......@@ -555,12 +577,17 @@ public class CloudSim {
/**
* Used to send an event from one entity to another.
*
* @param src the src
* @param dest the dest
* @param delay the delay
* @param tag the tag
* @param data the data
*
* @param src
* the src
* @param dest
* the dest
* @param delay
* the delay
* @param tag
* the tag
* @param data
* the data
*/
public static void send(int src, int dest, double delay, int tag, Object data) {
if (delay < 0) {
......@@ -572,13 +599,19 @@ public class CloudSim {
}
/**
* Used to send an event from one entity to another, with priority in the queue.
*
* @param src the src
* @param dest the dest
* @param delay the delay
* @param tag the tag
* @param data the data
* Used to send an event from one entity to another, with priority in the
* queue.
*
* @param src
* the src
* @param dest
* the dest
* @param delay
* the delay
* @param tag
* the tag
* @param data
* the data
*/
public static void sendFirst(int src, int dest, double delay, int tag, Object data) {
if (delay < 0) {
......@@ -590,12 +623,15 @@ public class CloudSim {
}
/**
* Sets an entity's state to be waiting. The predicate used to wait for an event
* is now passed to Sim_system. Only events that satisfy the predicate will be
* passed to the entity. This is done to avoid unnecessary context switches.
*
* @param src the src
* @param p the p
* Sets an entity's state to be waiting. The predicate used to wait for an
* event is now passed to Sim_system. Only events that satisfy the predicate
* will be passed to the entity. This is done to avoid unnecessary context
* switches.
*
* @param src
* the src
* @param p
* the p
*/
public static void wait(int src, Predicate p) {
entities.get(src).setState(SimEntity.WAITING);
......@@ -606,11 +642,14 @@ public class CloudSim {
}
/**
* Checks if events for a specific entity are present in the deferred event queue.
*
* @param d the d
* @param p the p
*
* Checks if events for a specific entity are present in the deferred event
* queue.
*
* @param d
* the d
* @param p
* the p
*
* @return the int
*/
public static int waiting(int d, Predicate p) {
......@@ -628,10 +667,12 @@ public class CloudSim {
/**
* Selects an event matching a predicate.
*
* @param src the src
* @param p the p
*
*
* @param src
* the src
* @param p
* the p
*
* @return the sim event
*/
public static SimEvent select(int src, Predicate p) {
......@@ -649,9 +690,11 @@ public class CloudSim {
/**
* Find first deferred event matching a predicate.
*
* @param src the src
* @param p the p
*
* @param src
* the src
* @param p
* the p
* @return the sim event
*/
public static SimEvent findFirstDeferred(int src, Predicate p) {
......@@ -668,10 +711,12 @@ public class CloudSim {
/**
* Removes an event from the event queue.
*
* @param src the src
* @param p the p
*
*
* @param src
* the src
* @param p
* the p
*
* @return the sim event
*/
public static SimEvent cancel(int src, Predicate p) {
......@@ -689,12 +734,15 @@ public class CloudSim {
}
/**
* Removes all events that match a given predicate from the future event queue
* returns true if at least one event has been cancelled; false otherwise.
*
* @param src the src
* @param p the p
*
* Removes all events that match a given predicate from the future event
* queue returns true if at least one event has been cancelled; false
* otherwise.
*
* @param src
* the src
* @param p
* the p
*
* @return true, if successful
*/
public static boolean cancelAll(int src, Predicate p) {
......@@ -716,8 +764,9 @@ public class CloudSim {
/**
* Processes an event.
*
* @param e the e
*
* @param e
* the e
*/
private static void processEvent(SimEvent e) {
int dest, src;
......@@ -730,50 +779,49 @@ public class CloudSim {
// Ok now process it
switch (e.getType()) {
case SimEvent.ENULL:
throw new IllegalArgumentException("Event has a null type.");
case SimEvent.CREATE:
SimEntity newe = (SimEntity) e.getData();
addEntityDynamically(newe);
break;
case SimEvent.SEND:
// Check for matching wait
dest = e.getDestination();
if (dest < 0) {
throw new IllegalArgumentException(
"Attempt to send to a null entity detected.");
} else {
int tag = e.getTag();
dest_ent = entities.get(dest);
if (dest_ent.getState() == SimEntity.WAITING) {
Integer destObj = Integer.valueOf(dest);
Predicate p = waitPredicates.get(destObj);
if ((p == null) || (tag == 9999) || (p.match(e))) {
dest_ent.setEventBuffer((SimEvent) e.clone());
dest_ent.setState(SimEntity.RUNNABLE);
waitPredicates.remove(destObj);
} else {
deferred.addEvent(e);
}
case SimEvent.ENULL:
throw new IllegalArgumentException("Event has a null type.");
case SimEvent.CREATE:
SimEntity newe = (SimEntity) e.getData();
addEntityDynamically(newe);
break;
case SimEvent.SEND:
// Check for matching wait
dest = e.getDestination();
if (dest < 0) {
throw new IllegalArgumentException("Attempt to send to a null entity detected.");
} else {
int tag = e.getTag();
dest_ent = entities.get(dest);
if (dest_ent.getState() == SimEntity.WAITING) {
Integer destObj = Integer.valueOf(dest);
Predicate p = waitPredicates.get(destObj);
if ((p == null) || (tag == 9999) || (p.match(e))) {
dest_ent.setEventBuffer((SimEvent) e.clone());
dest_ent.setState(SimEntity.RUNNABLE);
waitPredicates.remove(destObj);
} else {
deferred.addEvent(e);
}
}
break;
case SimEvent.HOLD_DONE:
src = e.getSource();
if (src < 0) {
throw new IllegalArgumentException("Null entity holding.");
} else {
entities.get(src).setState(SimEntity.RUNNABLE);
deferred.addEvent(e);
}
break;
}
break;
case SimEvent.HOLD_DONE:
src = e.getSource();
if (src < 0) {
throw new IllegalArgumentException("Null entity holding.");
} else {
entities.get(src).setState(SimEntity.RUNNABLE);
}
break;
default:
break;
default:
break;
}
}
......@@ -794,19 +842,17 @@ public class CloudSim {
/**
* Check if the simulation is still running. This method should be used by
* entities to check if they should continue executing.
*
* @return if the simulation is still running,
* otherwise
*
* @return if the simulation is still running, otherwise
*/
public static boolean running() {
return running;
}
}
/**
* This method is called if one wants to pause the simulation.
*
* @return true, if successful
* otherwise.
*
* @return true, if successful otherwise.
*/
public static boolean pauseSimulation() {
paused = true;
......@@ -816,10 +862,10 @@ public class CloudSim {
/**
* This method is called if one wants to pause the simulation at a given
* time.
*
* @param time the time at which the simulation has to be paused
* @return true, if successful
* otherwise.
*
* @param time
* the time at which the simulation has to be paused
* @return true, if successful otherwise.
*/
public static boolean pauseSimulation(long time) {
if (time <= clock) {
......@@ -833,9 +879,8 @@ public class CloudSim {
/**
* This method is called if one wants to resume the simulation that has
* previously been paused.
*
* @return if the simulation has been restarted or or
* otherwise.
*
* @return if the simulation has been restarted or or otherwise.
*/
public static boolean resumeSimulation() {
paused = false;
......@@ -845,12 +890,12 @@ public class CloudSim {
}
return !paused;
}
}
/**
* Start the simulation running. This should be called after all the
* entities have been setup and added, and their ports linked.
*
*
* @return the double last clock value
*/
public static double run() {
......@@ -861,15 +906,17 @@ public class CloudSim {
if (runClockTick() || abruptTerminate) {
break;
}
//this block allows termination of simulation at a specific time
// this block allows termination of simulation at a specific time
if (terminateAt > 0.0 && clock >= terminateAt) {
terminateSimulation();
clock = terminateAt;
break;
}
if (pauseAt != -1 && ((future.size() > 0 && clock <= pauseAt && pauseAt <= future.iterator().next().eventTime()) || future.size() == 0 && pauseAt <= clock)) {
if (pauseAt != -1
&& ((future.size() > 0 && clock <= pauseAt && pauseAt <= future.iterator().next()
.eventTime()) || future.size() == 0 && pauseAt <= clock)) {
pauseSimulation();
clock = pauseAt;
}
......@@ -933,8 +980,9 @@ public class CloudSim {
/**
* Prints a message about the progress of the simulation.
*
* @param message the message
*
* @param message
* the message
*/
private static void printMessage(String message) {
Log.printLine(message);
......@@ -942,7 +990,7 @@ public class CloudSim {
/**
* Checks if is paused.
*
*
* @return true, if is paused
*/
public static boolean isPaused() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment