/*
* Copyright (C) 2008 Universidade Federal de Campina Grande
*
* This file is part of OurGrid.
*
* OurGrid is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.ourgrid.discoveryservice.communication.receiver;
import java.util.ArrayList;
import java.util.List;
import org.ourgrid.common.interfaces.DiscoveryService;
import org.ourgrid.common.interfaces.DiscoveryServiceClient;
import org.ourgrid.common.internal.OurGridRequestControl;
import org.ourgrid.discoveryservice.DiscoveryServiceConstants;
import org.ourgrid.discoveryservice.config.DiscoveryServiceConfiguration;
import org.ourgrid.discoveryservice.request.DSClientGetDiscoveryServicesRequestTO;
import org.ourgrid.discoveryservice.request.DSClientIsDownRequestTO;
import org.ourgrid.discoveryservice.request.DSClientIsUpRequestTO;
import org.ourgrid.discoveryservice.request.DSGetDiscoveryServicesRequestTO;
import org.ourgrid.discoveryservice.request.GetRemoteWorkerProvidersRequestTO;
import org.ourgrid.discoveryservice.request.HereAreDiscoveryServicesRequestTO;
import org.ourgrid.discoveryservice.request.HereIsRemoteWorkerProviderListRequestTO;
import org.ourgrid.discoveryservice.request.LeaveCommunityRequestTO;
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;
public class DiscoveryServiceReceiver implements DiscoveryService {
private ServiceManager serviceManager;
@InvokeOnDeploy
public void init(ServiceManager serviceManager) {
this.serviceManager = serviceManager;
}
public void leaveCommunity(@MonitoredBy(DiscoveryServiceConstants.DS_OBJECT_NAME) DiscoveryServiceClient dsClient) {
LeaveCommunityRequestTO to = new LeaveCommunityRequestTO();
ServiceID serviceID = serviceManager.getStubDeploymentID(dsClient).getServiceID();
to.setClientAddress(serviceID.toString());
to.setClientUserAtServer(serviceID.getContainerID().getUserAtServer());
OurGridRequestControl.getInstance().execute(to, serviceManager);
}
public void getRemoteWorkerProviders( @MonitoredBy(DiscoveryServiceConstants.DS_OBJECT_NAME) DiscoveryServiceClient dsClient, int maxResponseSize) {
GetRemoteWorkerProvidersRequestTO to = new GetRemoteWorkerProvidersRequestTO();
ServiceID serviceID = serviceManager.getStubDeploymentID(dsClient).getServiceID();
to.setClientAddress(serviceID.toString());
to.setClientUserAtServer(serviceID.getContainerID().getUserAtServer().toString());
to.setMyAddress(serviceManager.getObjectDeploymentID(
DiscoveryServiceConstants.DS_OBJECT_NAME).getServiceID().toString());
to.setMaxResponseSize(maxResponseSize);
to.setOverloadThreshold(serviceManager.getContainerContext().parseIntegerProperty(
DiscoveryServiceConfiguration.PROP_OVERLOAD_THRESHOLD));
to.setDsMaxResponse(serviceManager.getContainerContext().parseIntegerProperty(
DiscoveryServiceConfiguration.PROP_MAX_RESPONSE_SIZE));
OurGridRequestControl.getInstance().execute(to, serviceManager);
}
@RecoveryNotification
public void dsClientIsUp(DiscoveryServiceClient discoveryServiceClient, DeploymentID providerDID) {
DSClientIsUpRequestTO to = new DSClientIsUpRequestTO();
to.setClientUserAtServer(providerDID.getContainerID().getUserAtServer().toString());
OurGridRequestControl.getInstance().execute(to, serviceManager);
}
@FailureNotification
public void dsClientIsDown(DiscoveryServiceClient discoveryServiceClient, DeploymentID monitorableID) {
DSClientIsDownRequestTO to = new DSClientIsDownRequestTO();
to.setClientAddress(monitorableID == null ? null : monitorableID.getServiceID().toString());
to.setClientUserAtServer(monitorableID == null ? null : monitorableID.getServiceID().getContainerID().getUserAtServer());
OurGridRequestControl.getInstance().execute(to, serviceManager);
}
public void getDiscoveryServices(@MonitoredBy(DiscoveryServiceConstants.DS_MONITOR) DiscoveryService discoveryService) {
DSGetDiscoveryServicesRequestTO to = new DSGetDiscoveryServicesRequestTO();
to.setDsAddress(serviceManager.getStubDeploymentID(discoveryService).getServiceID().toString());
OurGridRequestControl.getInstance().execute(to, serviceManager);
}
public void hereAreDiscoveryServices(List<ServiceID> discoveryServicesID) {
HereAreDiscoveryServicesRequestTO to = new HereAreDiscoveryServicesRequestTO();
List<String> dsAddresses = new ArrayList<String>();
for (ServiceID id : discoveryServicesID) {
dsAddresses.add(id.toString());
}
to.setDiscoveryServicesAddresses(dsAddresses);
to.setMyAddress(serviceManager.getObjectDeploymentID(DiscoveryServiceConstants.DS_OBJECT_NAME).getServiceID().toString());
to.setSenderAddress(serviceManager.getSenderServiceID().toString());
OurGridRequestControl.getInstance().execute(to, serviceManager);
}
public void getDiscoveryServices( @MonitoredBy(DiscoveryServiceConstants.DS_OBJECT_NAME) DiscoveryServiceClient discoveryServiceClient) {
DSClientGetDiscoveryServicesRequestTO to = new DSClientGetDiscoveryServicesRequestTO();
DeploymentID stubDeploymentID = serviceManager.getStubDeploymentID(discoveryServiceClient);
to.setClientAddress(stubDeploymentID.getServiceID().toString());
to.setClientUserAtServer(stubDeploymentID.getContainerID().getUserAtServer());
to.setMyAddress(serviceManager.getObjectDeploymentID(
DiscoveryServiceConstants.DS_OBJECT_NAME).getServiceID().toString());
to.setOverloadThreshold(serviceManager.getContainerContext().parseIntegerProperty(
DiscoveryServiceConfiguration.PROP_OVERLOAD_THRESHOLD));
OurGridRequestControl.getInstance().execute(to, serviceManager);
}
public void hereIsRemoteWorkerProviderList( List<String> workerProviders ) {
HereIsRemoteWorkerProviderListRequestTO to = new HereIsRemoteWorkerProviderListRequestTO();
to.setSenderAddress(serviceManager.getSenderServiceID().toString());
to.setWorkerProviders(workerProviders);
OurGridRequestControl.getInstance().execute(to, serviceManager);
}
}