package schedframe.scheduling.plugin.local; import java.util.List; import schedframe.exceptions.ReservationException; import schedframe.scheduling.AbstractResourceRequirements; import schedframe.scheduling.AbstractTimeRequirements; import schedframe.scheduling.Offer; import schedframe.scheduling.Queue; import schedframe.scheduling.Reservation; import schedframe.scheduling.ResourceUsage; import schedframe.scheduling.TaskInterface; import schedframe.scheduling.TimeResourceAllocation; import schedframe.scheduling.events.SchedulingEvent; import schedframe.scheduling.events.SchedulingResponseType; import test.rewolucja.GSSIMJobInterface; import test.rewolucja.reservation.LocalReservationManagerNew; import test.rewolucja.reservation.ReservationNew; import test.rewolucja.resources.manager.interfaces.ResourceManagerInterface; import test.rewolucja.scheduling.JobRegistryInterface; import test.rewolucja.scheduling.queue.QueueList; /** * This interface represents methods of a local scheduling plugin with advance reservation functionality. * * @author Ariel */ public interface LocalSchedulingARPlugin extends LocalSchedulingPlugin { /** * Check scheduler knowledge about requested reservation status. * * @param reservation * @param reservationManager * @return reservation status (see {@link schedframe.scheduling.Reservation.Status}) * @throws ReservationException if some error occurs */ public ReservationNew.Status getStatus(ReservationNew reservation, LocalReservationManager reservationManager) throws ReservationException; /** * Calculates offers which satisfies time and resource requirements * * @param timeReqs time constraints * @param resReqs resource requirements * @param inExecution list of task which are currently running * @param queues list of queues in which tasks are waiting for execution * @param unitsManager * @param reservationManager * @return offers for resource consumers * @throws ReservationException if some error occurs */ public List getOffers(AbstractTimeRequirements timeReqs, AbstractResourceRequirements resReqs, JobRegistryInterface jobRegistry, QueueList queues, ResourceManagerInterface resourceManager, LocalReservationManager reservationManager) throws ReservationException; /** * Creates list of reservations, one for each time interval described in resource usage. * Depends form implementation, created reservation may be final - ready to be used * or initial - requires commit step to reach final state. * If the reservation is not committed before certain time the initial reservation expires. * * @param resourceUsage describes resources which should be reserved and time constraints * @param inExecution list of tasks which are currently running * @param queues list of queues in which tasks are waiting for execution * @param unitsManager * @param reservationManager * @return reservation * @throws ReservationException if reservation can not be created */ public List createReservation(ResourceUsage resourceUsage, JobRegistryInterface jobRegistry, QueueList queues, ResourceManagerInterface resourceManager, LocalReservationManager reservationManager) throws ReservationException; /** * Creates reservation for resources described by resourceUsage parameter. * Depends form implementation, created reservation may be final - ready to be used * or initial - requires commit step to reach final state. * If the reservation is not committed before certain time the initial reservation expires. * Otherwise provider should accept the commitment. * * @param timeRequirements describes interval of time which should be reserved * @param resourceRequirements describes type and amount of the resource which * should be reserved * @param inExecution list of tasks which are currently running * @param queues list of queues in which tasks are waiting for execution * @param unitsManager * @param reservationManager * @return reservation * @throws ReservationException if reservation can not be created */ public ReservationNew createReservation(AbstractTimeRequirements timeRequirements, AbstractResourceRequirements resourceRequirements, JobRegistryInterface jobRegistry, QueueList queues, ResourceManagerInterface resourceManager, LocalReservationManager reservationManager) throws ReservationException; /** * Commits reservation or reject the request * * @param initialReservation reservation which should be committed * @param inExecution list of tasks which are currently running * @param queues list of queues in which tasks are waiting for execution * @param unitsManager * @param reservationManager * @return reservation if the reservation has been accepted * @throws ReservationException if reservation can not be committed */ public ReservationNew commitReservation(ReservationNew initialReservation, JobRegistryInterface jobRegistry, QueueList queues, ResourceManagerInterface resourceManager, LocalReservationManager reservationManager) throws ReservationException; /** * Commits reservation or reject the request * * @param initialReservation reservation which should be committed * @param resourceUsage expected modification of initial reservation * @param inExecution list of tasks which are currently running * @param queues list of queues in which tasks are waiting for execution * @param unitsManager * @param reservationManager * @return reservation if the reservation has been accepted * @throws ReservationException if reservation can not be committed */ public ReservationNew commitReservation(ReservationNew initialReservation, TimeResourceAllocation resourceUsage, JobRegistryInterface jobRegistry, QueueList queues, ResourceManagerInterface resourceManager, LocalReservationManager reservationManager) throws ReservationException; /** * Cancels reservation * * @param reservation which should be canceled * @param inExecution list of tasks which are currently running * @param queues list of queues in which tasks are waiting for execution * @param reservationManager * @throws ReservationException if reservation can not be canceled or some error occurs */ public void cancelReservation(ReservationNew reservation, JobRegistryInterface jobRegistry, QueueList queues, LocalReservationManager reservationManager) throws ReservationException; /** * Modify reservation * * @param reservation which should be modified * @param resourceUsage describes new time and resource requirements * @param inExecution list of tasks which are currently running * @param queues list of queues in which tasks are waiting for execution * @param unitManager * @param reservationManager * @return modified reservation * @throws ReservationException if modification is not possible */ public ReservationNew modifyReservation(ReservationNew reservation, TimeResourceAllocation resourceUsage, JobRegistryInterface jobRegistry, QueueList queues, ResourceManagerInterface resourceManager, LocalReservationManager reservationManager) throws ReservationException; //Methods used for task scheduling (called when there are some changed within the system) }