@RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
@RequiredPermission(Permission.MANAGE_INVENTORY) })
public void deleteServer(Subject subject, Integer serverId) throws TopologyManagerException {
try {
Server server = entityManager.find(Server.class, serverId);
if (Server.OperationMode.NORMAL == server.getOperationMode()) {
throw new TopologyManagerException("Could not delete server " + server.getName()
+ ". Server must be down or in maintenance mode. Current operating mode is: "
+ server.getOperationMode().name());
}
// Delete any server list entries referencing this server
failoverListManager.deleteServerListDetailsForServer(serverId);
// Delete any agent references to this server
Query query = entityManager.createNamedQuery(Agent.QUERY_REMOVE_SERVER_REFERENCE);
query.setParameter("serverId", serverId);
query.executeUpdate();
// Then, delete the server
query = entityManager.createNamedQuery(Server.QUERY_DELETE_BY_ID);
query.setParameter("serverId", serverId);
query.executeUpdate();
entityManager.flush();
entityManager.clear();
log.info("Removed server " + server);
// Now, request a cloud repartitioning due to the server removal
partitionEventManager.cloudPartitionEventRequest(LookupUtil.getSubjectManager().getOverlord(),
PartitionEventType.SERVER_DELETION, server.getName());
} catch (Exception e) {
throw new TopologyManagerException("Could not delete server[id=" + serverId + "]: " + e.getMessage(), e);
}
}