public synchronized boolean commitReservation(ReservationMessage message) {
        int resId = message.getReservationID();
        ServerReservation sRes = null;
		String msg = "Reservation # " + resId + " cannot be committed because it ";
		
        // Tries to find the reservation in the lists
		if(reservTable.containsKey(resId)) {
			sRes = reservTable.get(resId);
		} else if(expiryTable.containsKey(resId)) {
			sRes = expiryTable.get(resId);

			if(sRes.getReservationStatus() == ReservationStatus.CANCELLED) {
				logger.info(msg + "has previously been cancelled by the allocation policy.");
			} else if (sRes.getReservationStatus() == ReservationStatus.FINISHED) {
				logger.info(msg + "has finished.");
			} else {
				logger.info(msg + "is in the expiry list.");
			}
			
			return false;
		} else {
			logger.info(msg + "could not be found.");
    		return false;
		}

        // sets the reservation to committed if it has not been set before
        if(sRes.getReservationStatus() == ReservationStatus.NOT_COMMITTED) {
        	sRes.setStatus(ReservationStatus.COMMITTED);
        	
            // then send this into itself to start the reservation
            super.sendInternalEvent(sRes.getStartTime() - GridSim.clock(), 
            		ConservativeBackfill.UPT_SCHEDULE);
        }

    	//-------------- FOR DEBUGGING PURPOSES ONLY  --------------
    	visualizer.notifyListeners(this.get_id(), ActionType.ITEM_STATUS_CHANGED, true, sRes);
        //----------------------------------------------------------
        return true;
	}