use of cz.metacentrum.perun.core.api.Destination in project perun by CESNET.
the class TaskExecutorEngineImpl method runTask.
/**
* Put the task into PROCESSING state and create workers for all
* destinations that have satisfied dependencies (or no dependencies at
* all).
*
* @param task
* Task to start.
*
*/
public void runTask(Task task) {
schedulingPool.setTaskStatus(task, TaskStatus.PROCESSING);
task.setStartTime(new Date(System.currentTimeMillis()));
List<Task> dependencies = dependencyResolver.getDependencies(task);
// TODO: handle GEN tasks with no destinations
boolean started = false;
for (Destination destination : taskStatusManager.getTaskStatus(task).getWaitingDestinations()) {
// check if all the dependency destinations are done
boolean proceed = true;
try {
for (Task dependency : dependencies) {
if (taskStatusManager.getTaskStatus(dependency).getDestinationStatus(destination) != TaskDestinationStatus.DONE) {
log.debug("TASK " + task.toString() + " has unmet dependencies");
proceed = false;
}
}
} catch (InternalErrorException e) {
log.error("Error getting dependency status for task {}", task.toString());
}
if (proceed) {
try {
if (task.getExecService().getExecServiceType().equals(ExecServiceType.SEND)) {
taskStatusManager.getTaskStatus(task).setDestinationStatus(destination, TaskDestinationStatus.PROCESSING);
}
} catch (InternalErrorException e) {
log.error("Error setting status for destination {} of task {}", destination, task.toString());
}
try {
startWorker(task, destination);
started = true;
} catch (Exception e) {
log.error("Error queuing worker for execution: " + e.toString());
}
}
}
if (!started) {
log.warn("No worker started for task {}, setting to ERROR", task.getId());
task.setEndTime(new Date(System.currentTimeMillis()));
schedulingPool.setTaskStatus(task, TaskStatus.ERROR);
}
}
use of cz.metacentrum.perun.core.api.Destination in project perun by CESNET.
the class ServicesManagerEntryIntegrationTest method getDestinationsWithPerunSession.
@Test
public void getDestinationsWithPerunSession() throws Exception {
System.out.println(CLASS_NAME + "getDestinations");
Service service1 = setUpService();
Facility facility1 = setUpFacility();
Destination destination = setUpDestination();
perun.getServicesManager().addDestination(sess, service1, facility1, destination);
List<Destination> destinations = perun.getServicesManager().getDestinations(sess);
assertTrue("there should be at least one destination", destinations.size() >= 1);
assertTrue("our destination should be between all destinations", destinations.contains(destination));
}
use of cz.metacentrum.perun.core.api.Destination in project perun by CESNET.
the class ServicesManagerEntryIntegrationTest method setUpDestination.
private Destination setUpDestination() throws Exception {
Destination destination = new Destination();
destination.setDestination("testDestination");
destination.setType("service-specific");
return destination;
}
use of cz.metacentrum.perun.core.api.Destination in project perun by CESNET.
the class FacilitiesManagerEntryIntegrationTest method addHostSameDestinationDifferentAdmin.
@Test(expected = PrivilegeException.class)
public void addHostSameDestinationDifferentAdmin() throws Exception {
System.out.println(CLASS_NAME + "addHostSameDestinationDifferentAdmin");
// Initialize host, destination and service
String hostName = "TestHost";
Host host = new Host(0, hostName);
Destination destination = new Destination(0, hostName, Destination.DESTINATIONHOSTTYPE);
Service service = new Service(0, "testService");
ServicesManager servicesManagerEntry = perun.getServicesManager();
service = servicesManagerEntry.createService(sess, service);
// Creates second facility
Facility secondFacility = new Facility(0, "TestSecondFacility", "TestDescriptionText");
assertNotNull(perun.getFacilitiesManager().createFacility(sess, secondFacility));
// Set up two members
Member memberOne = setUpMember(vo);
Member memberTwo = setUpMember(vo);
// Set users as admins of different facilities
User userOne = perun.getUsersManagerBl().getUserByMember(sess, memberOne);
facilitiesManagerEntry.addAdmin(sess, facility, userOne);
User userTwo = perun.getUsersManagerBl().getUserByMember(sess, memberTwo);
facilitiesManagerEntry.addAdmin(sess, secondFacility, userTwo);
// Sets userOne as actor in this test with role facility admin for facility
AuthzRoles authzRoles = new AuthzRoles(Role.FACILITYADMIN, facility);
sess.getPerunPrincipal().setRoles(authzRoles);
sess.getPerunPrincipal().setUser(userOne);
// Adds destination to facility
servicesManagerEntry.addDestination(sess, service, facility, destination);
assertTrue(servicesManagerEntry.getDestinations(sess, service, facility).size() == 1);
// Change actor in this test to userTwo
authzRoles = new AuthzRoles(Role.FACILITYADMIN, secondFacility);
sess.getPerunPrincipal().setRoles(authzRoles);
sess.getPerunPrincipal().setUser(userTwo);
// Adds same host as destination to secondFacility with different admin -> should throw exception
facilitiesManagerEntry.addHost(sess, host, secondFacility);
}
use of cz.metacentrum.perun.core.api.Destination in project perun by CESNET.
the class FacilitiesManagerEntryIntegrationTest method addHostsStringsSameDestinationDifferentAdmin.
@Test(expected = PrivilegeException.class)
public void addHostsStringsSameDestinationDifferentAdmin() throws Exception {
System.out.println(CLASS_NAME + "addHostsStringsSameDestinationDifferentAdmin");
// Sets list of hostnames
String hostName = "testHostOne";
List<String> listOfHosts = new ArrayList<String>();
listOfHosts.add(hostName);
hostName = "testHostTwo";
listOfHosts.add(hostName);
// Initialize destination and service
Destination destination = new Destination(0, hostName, Destination.DESTINATIONHOSTTYPE);
Service service = new Service(0, "testService");
ServicesManager servicesManagerEntry = perun.getServicesManager();
service = servicesManagerEntry.createService(sess, service);
// Creates second facility
Facility secondFacility = new Facility(0, "TestSecondFacility", "TestDescriptionText");
assertNotNull(perun.getFacilitiesManager().createFacility(sess, secondFacility));
// Set up two members
Member memberOne = setUpMember(vo);
Member memberTwo = setUpMember(vo);
// Set users as admins of different facilities
User userOne = perun.getUsersManagerBl().getUserByMember(sess, memberOne);
facilitiesManagerEntry.addAdmin(sess, facility, userOne);
User userTwo = perun.getUsersManagerBl().getUserByMember(sess, memberTwo);
facilitiesManagerEntry.addAdmin(sess, secondFacility, userTwo);
// Sets userOne as actor in this test with role facility admin for facility
AuthzRoles authzRoles = new AuthzRoles(Role.FACILITYADMIN, facility);
sess.getPerunPrincipal().setRoles(authzRoles);
sess.getPerunPrincipal().setUser(userOne);
// Adds destination to facility
servicesManagerEntry.addDestination(sess, service, facility, destination);
assertTrue(servicesManagerEntry.getDestinations(sess, service, facility).size() == 1);
// Change actor in this test to userTwo
authzRoles = new AuthzRoles(Role.FACILITYADMIN, secondFacility);
sess.getPerunPrincipal().setRoles(authzRoles);
sess.getPerunPrincipal().setUser(userTwo);
// Adds same host as destination to secondFacility with different admin -> should throw exception
facilitiesManagerEntry.addHosts(sess, secondFacility, listOfHosts);
}
Aggregations