package org.ourgrid.peer.communication.receiver; import org.ourgrid.common.interfaces.RemoteWorkerProvider; import org.ourgrid.common.interfaces.RemoteWorkerProviderClient; import org.ourgrid.common.interfaces.to.RequestSpecification; import org.ourgrid.common.internal.OurGridRequestControl; import org.ourgrid.peer.PeerConfiguration; import org.ourgrid.peer.PeerConstants; import org.ourgrid.peer.request.RemoteDisposeWorkerRequestTO; import org.ourgrid.peer.request.RemoteWorkerProviderRequestWorkersRequestTO; import org.ourgrid.reqtrace.Req; import br.edu.ufcg.lsd.commune.api.FailureNotification; import br.edu.ufcg.lsd.commune.api.InvokeOnDeploy; import br.edu.ufcg.lsd.commune.api.MonitoredBy; import br.edu.ufcg.lsd.commune.api.RecoveryNotification; import br.edu.ufcg.lsd.commune.container.servicemanager.ServiceManager; import br.edu.ufcg.lsd.commune.identification.DeploymentID; import br.edu.ufcg.lsd.commune.identification.ServiceID; import br.edu.ufcg.lsd.commune.network.certification.CertificationUtils; import br.edu.ufcg.lsd.commune.network.signature.SignatureProperties; /** * Performs Remote Worker Provider Receiver actions */ @Req("REQ011") public class RemoteWorkerProviderReceiver implements RemoteWorkerProvider{ private ServiceManager serviceManager; @InvokeOnDeploy public void init(ServiceManager serviceManager) { this.serviceManager = serviceManager; } @Req("REQ015") public void disposeWorker(ServiceID workerServiceID) { String consumerPublicKey = serviceManager.getSenderPublicKey(); RemoteDisposeWorkerRequestTO to = new RemoteDisposeWorkerRequestTO(); to.setConsumerPublicKey(consumerPublicKey); if (workerServiceID != null) { to.setWorkerAddress(workerServiceID.toString()); to.setWorkerPublicKey(workerServiceID.getPublicKey()); to.setWorkerUserAtServer(workerServiceID.getContainerID().getUserAtServer()); } OurGridRequestControl.getInstance().execute(to, serviceManager); } /** * Validates and executes a remote request. * * @param workerProviderClient * @param requestSpec * @param senderPublicKey */ @Req("REQ011") public void requestWorkers( @MonitoredBy(PeerConstants.REMOTE_WORKER_PROVIDER) RemoteWorkerProviderClient workerProviderClient, RequestSpecification requestSpec) { RemoteWorkerProviderRequestWorkersRequestTO to = new RemoteWorkerProviderRequestWorkersRequestTO(); to.setSenderPublicKey(serviceManager.getSenderPublicKey()); to.setRequestSpec(requestSpec); DeploymentID workerProviderClientID = serviceManager.getStubDeploymentID(workerProviderClient); if (workerProviderClientID != null) { to.setRemoteWorkerProviderClientAddress(workerProviderClientID.getServiceID().toString()); to.setRemoteWorkerProviderClientContainerID(workerProviderClientID.getContainerID().toString()); to.setRemoteWorkerProviderClientPublicKey(workerProviderClientID.getPublicKey()); } to.setConsumerDN(CertificationUtils.getCertSubjectDN(serviceManager.getSenderCertPath())); to.setMyCertPath(serviceManager.getMyCertPath()); to.setMyPrivateKey(serviceManager.getContainerContext().getProperty(SignatureProperties.PROP_PRIVATE_KEY)); to.setVomsURLList(serviceManager.getContainerContext().parseStringListProperty( PeerConfiguration.PROP_VOMS_URL)); to.setUseVomsAuth(serviceManager.getContainerContext().isEnabled(PeerConfiguration.PROP_USE_VOMS)); OurGridRequestControl.getInstance().execute(to, serviceManager); } @RecoveryNotification public void doNotifyRecovery(RemoteWorkerProviderClient monitorable, DeploymentID rwpcDID) {} /** * Notifies that the {@link RemoteWorkerProviderClient} has failed * @param monitorable The {@link RemoteWorkerProviderClient} that has failed. * @param rwpcID The DeploymentID of the {@link RemoteWorkerProviderClient} that has failed. */ @FailureNotification public void doNotifyFailure(RemoteWorkerProviderClient monitorable, DeploymentID rwpcDID) {} }