package org.ourgrid.worker.business.requester; import java.util.ArrayList; import java.util.List; import org.ourgrid.common.interfaces.to.WorkerStatus; import org.ourgrid.common.internal.IResponseTO; import org.ourgrid.common.internal.RequesterIF; import org.ourgrid.common.internal.response.LoggerResponseTO; import org.ourgrid.common.internal.response.ReleaseResponseTO; import org.ourgrid.worker.business.controller.ExecutionController; import org.ourgrid.worker.business.controller.WorkerController; import org.ourgrid.worker.business.dao.WorkerDAOFactory; import org.ourgrid.worker.business.dao.WorkerStatusDAO; import org.ourgrid.worker.business.messages.WorkerManagementClientFailureControllerMessages; import org.ourgrid.worker.request.RemoteWorkerManagementClientDoNotifyFailureRequestTO; import org.ourgrid.worker.response.CancelReportAccountingActionResponseTO; public class RemoteWorkerManagementClientDoNotifyFailureRequester implements RequesterIF<RemoteWorkerManagementClientDoNotifyFailureRequestTO> { @Override public List<IResponseTO> execute(RemoteWorkerManagementClientDoNotifyFailureRequestTO request) { List<IResponseTO> responses = new ArrayList<IResponseTO>(); WorkerStatusDAO workerStatusDAO = WorkerDAOFactory.getInstance().getWorkerStatusDAO(); if (workerStatusDAO.getMasterPeerAddress() == null) { responses.add(new LoggerResponseTO( WorkerManagementClientFailureControllerMessages. getUndefinedMasterPeerFailsMessage(request.getMonitorableID()), LoggerResponseTO.WARN)); return responses; } boolean isWorkingState = workerStatusDAO.isWorkingState(); responses.add(new LoggerResponseTO("The remote peer [" + request.getMonitorableID() + "] has failed. Worker will interrupt the working," + " it means cancel any transfer or execution.", LoggerResponseTO.WARN)); if (workerStatusDAO.isAllocatedForRemotePeer()) { WorkerController.getInstance().interruptWorking(responses, true); workerStatusDAO.setStatus(WorkerStatus.IDLE); } if (isWorkingState) { ExecutionController.getInstance().beginAllocation(responses); } CancelReportAccountingActionResponseTO cancelReportAccountingTO = new CancelReportAccountingActionResponseTO(); responses.add(cancelReportAccountingTO); WorkerDAOFactory.getInstance().getWorkAccountingDAO().resetAccountings(); ReleaseResponseTO releaseTO = new ReleaseResponseTO(); releaseTO.setStubAddress(request.getMonitorableAddress()); responses.add(releaseTO); return responses; } }