Skip to content

Commit

Permalink
fix to component service bus model; RT:#2558
Browse files Browse the repository at this point in the history
  • Loading branch information
decker committed Aug 17, 2011
1 parent 88dda3d commit e0a732d
Show file tree
Hide file tree
Showing 6 changed files with 180 additions and 234 deletions.
@@ -1,32 +1,32 @@
/*
* Software License Agreement (BSD License)
*
* Copyright (c) 2008, Regents of the University of California
* Copyright (c) 2008,Regents of the University of California
* All rights reserved.
*
* Redistribution and use of this software in source and binary forms, with or
* without modification, are permitted provided that the following conditions
* Redistribution and use of this software in source and binary forms,with or
* without modification,are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* copyright notice,this list of conditions and the
* following disclaimer.
*
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the
* copyright notice,this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* AND ANY EXPRESS OR IMPLIED WARRANTIES,INCLUDING,BUT NOT LIMITED TO,THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* LIABLE FOR ANY DIRECT,INDIRECT,INCIDENTAL,SPECIAL,EXEMPLARY,OR
* CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT LIMITED TO,PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,DATA,OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,WHETHER IN
* CONTRACT,STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* Author: Neil Soman neil@eucalyptus.com
Expand All @@ -36,52 +36,51 @@

import java.net.InetAddress;
import org.apache.log4j.Logger;
import org.mule.RequestContext;
import com.eucalyptus.component.Component;
import com.eucalyptus.component.ComponentId;
import com.eucalyptus.component.ComponentIds;
import com.eucalyptus.component.Components;
import com.eucalyptus.component.Service;
import com.eucalyptus.component.ServiceConfiguration;
import com.eucalyptus.component.ServiceConfigurations;
import com.eucalyptus.context.ServiceContext;
import com.eucalyptus.util.EucalyptusCloudException;
import com.eucalyptus.util.Internets;
import edu.ucsb.eucalyptus.msgs.BaseMessage;
import edu.ucsb.eucalyptus.msgs.ComponentMessageType;

public class ComponentService {

private static Logger LOG = Logger.getLogger( ComponentService.class );
private static Logger LOG = Logger.getLogger(ComponentService.class);

public BaseMessage handle(ComponentMessageType request) throws EucalyptusCloudException {
public BaseMessage handle(ComponentMessageType request) throws Exception {
String component = request.getComponent();
String host = request.getHost();
String name = request.getName();

LOG.info("Component: " + component + "@" + host);
ServiceConfiguration service = lookupService( component, host, name );
if(service.isVmLocal()) {
return request;
} else {
BaseMessage reply;
try {
reply = service.lookupService( ).getDispatcher( ).send(request);
} catch (Exception e) {
LOG.error(e);
throw new EucalyptusCloudException("Unable to dispatch message to: " + service.getName());

ServiceConfiguration service = this.lookupService(component,host,name);
LOG.info("Component: "+service);
try {
BaseMessage reply = null;
if(service.isVmLocal()) {//send direct to local component using mule registry directly
reply = ServiceContext.send(service.getComponentId().getLocalEndpointName(),request);
} else {//send remote
reply = service.lookupService().getDispatcher().send(request);
}
return reply;
}
return reply;
} catch (Exception e) {
LOG.error(e);
throw new EucalyptusCloudException("Unable to dispatch message to: "+service.getName());
}
}

private ServiceConfiguration lookupService( String component, String name, String host ) throws EucalyptusCloudException {
Component destComp = Components.lookup( component );
if( name != null ) {
return destComp.lookupServiceConfiguration( name );
} else {
InetAddress hostAddress = Internets.toAddress( host );
for( ServiceConfiguration s : destComp.lookupServiceConfigurations( ) ) {
if( Internets.toAddress( s.getHostName( ) ).equals( hostAddress ) ) {
return s;
}
}
throw new EucalyptusCloudException("Unable to dispatch message to: " + component + "@" + host);
}
}
private ServiceConfiguration lookupService(String component,String name,String host) throws EucalyptusCloudException {
ComponentId destCompId = ComponentIds.lookup(component);
if(name != null) {
return ServiceConfigurations.lookupByName(destCompId.getClass(),name);
} else if (host != null) {
return ServiceConfigurations.lookupByHost(destCompId.getClass(),name);
} else {
throw new EucalyptusCloudException("Unable to dispatch message to: "+component+"@"+host);
}
}
}
219 changes: 114 additions & 105 deletions clc/modules/component/src/main/resources/component-model.xml
@@ -1,117 +1,126 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ Copyright (c) 2009 Eucalyptus Systems, Inc. ~ ~ This program is free
software: you can redistribute it and/or modify ~ it under the terms
of the GNU General Public License as published by ~ the Free Software
Foundation, only version 3 of the License. ~ ~ ~ This file 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 General Public License ~
for more details. ~ ~ You should have received a copy of the GNU
General Public License along ~ with this program. If not, see
http://www.gnu.org/licenses/. ~ ~ Please contact Eucalyptus Systems,
Inc., 130 Castilian ~ Dr., Goleta, CA 93101 USA or visit
http://www.eucalyptus.com/licenses/ ~ if you need additional
information or have any questions. ~ ~ This file may incorporate work
covered under the following copyright and ~ permission notice: ~ ~
Software License Agreement (BSD License) ~ ~ Copyright (c) 2008,
Regents of the University of California ~ All rights reserved. ~ ~
Redistribution and use of this software in source and binary forms,
with ~ or without modification, are permitted provided that the
following ~ conditions are met: ~ ~ Redistributions of source code
must retain the above copyright notice, ~ this list of conditions and
the following disclaimer. ~ ~ Redistributions in binary form must
reproduce the above copyright ~ notice, this list of conditions and
the following disclaimer in the ~ documentation and/or other materials
provided with the distribution. ~ ~ THIS SOFTWARE IS PROVIDED BY THE
COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ~ IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ~ TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ~ PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ~ OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
~ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
~ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ~
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
~ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
~ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ~
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. USERS OF
~ THIS SOFTWARE ACKNOWLEDGE THE POSSIBLE PRESENCE OF OTHER OPEN SOURCE
~ LICENSED MATERIAL, COPYRIGHTED MATERIAL OR PATENTED MATERIAL IN THIS
~ SOFTWARE, AND IF ANY SUCH MATERIAL IS DISCOVERED THE PARTY
DISCOVERING ~ IT MAY INFORM DR. RICH WOLSKI AT THE UNIVERSITY OF
CALIFORNIA, SANTA ~ BARBARA WHO WILL THEN ASCERTAIN THE MOST
APPROPRIATE REMEDY, WHICH IN ~ THE REGENTS' DISCRETION MAY INCLUDE,
WITHOUT LIMITATION, REPLACEMENT ~ OF THE CODE SO IDENTIFIED, LICENSING
OF THE CODE SO IDENTIFIED, OR ~ WITHDRAWAL OF THE CODE CAPABILITY TO
THE EXTENT NEEDED TO COMPLY WITH ~ ANY SUCH LICENSES OR RIGHTS.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ Author: Neil Soman neil@eucalyptus.com
<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ Copyright (c) 2009 Eucalyptus Systems, Inc.
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, only version 3 of the License.
~
~
~ This file 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 General Public License
~ for more details.
~
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see http://www.gnu.org/licenses/.
~
~ Please contact Eucalyptus Systems, Inc., 130 Castilian
~ Dr., Goleta, CA 93101 USA or visit http://www.eucalyptus.com/licenses/
~ if you need additional information or have any questions.
~
~ This file may incorporate work covered under the following copyright and
~ permission notice:
~
~ Software License Agreement (BSD License)
~
~ Copyright (c) 2008, Regents of the University of California
~ All rights reserved.
~
~ Redistribution and use of this software in source and binary forms, with
~ or without modification, are permitted provided that the following
~ conditions are met:
~
~ Redistributions of source code must retain the above copyright notice,
~ this list of conditions and the following disclaimer.
~
~ Redistributions in binary form must reproduce the above copyright
~ notice, this list of conditions and the following disclaimer in the
~ documentation and/or other materials provided with the distribution.
~
~ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
~ IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
~ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
~ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
~ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
~ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
~ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
~ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
~ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
~ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
~ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. USERS OF
~ THIS SOFTWARE ACKNOWLEDGE THE POSSIBLE PRESENCE OF OTHER OPEN SOURCE
~ LICENSED MATERIAL, COPYRIGHTED MATERIAL OR PATENTED MATERIAL IN THIS
~ SOFTWARE, AND IF ANY SUCH MATERIAL IS DISCOVERED THE PARTY DISCOVERING
~ IT MAY INFORM DR. RICH WOLSKI AT THE UNIVERSITY OF CALIFORNIA, SANTA
~ BARBARA WHO WILL THEN ASCERTAIN THE MOST APPROPRIATE REMEDY, WHICH IN
~ THE REGENTS' DISCRETION MAY INCLUDE, WITHOUT LIMITATION, REPLACEMENT
~ OF THE CODE SO IDENTIFIED, LICENSING OF THE CODE SO IDENTIFIED, OR
~ WITHDRAWAL OF THE CODE CAPABILITY TO THE EXTENT NEEDED TO COMPLY WITH
~ ANY SUCH LICENSES OR RIGHTS.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ Author: Neil Soman neil@eucalyptus.com
-->
<mule xmlns="http://www.mulesource.org/schema/mule/core/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:vm="http://www.mulesource.org/schema/mule/vm/2.0" xmlns:euca="http://eucalyptus.cs.ucsb.edu/schema/cloud/1.0"
xsi:schemaLocation="
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:vm="http://www.mulesource.org/schema/mule/vm/2.0"
xmlns:euca="http://www.eucalyptus.com/schema/cloud/1.6"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.mulesource.org/schema/mule/core/2.0 http://www.mulesource.org/schema/mule/core/2.0/mule.xsd
http://www.mulesource.org/schema/mule/vm/2.0 http://www.mulesource.org/schema/mule/vm/2.0/mule-vm.xsd
http://eucalyptus.cs.ucsb.edu/schema/cloud/1.0 http://eucalyptus.cs.ucsb.edu/schema/cloud/1.0/euca.xsd">
http://www.eucalyptus.com/schema/cloud/1.6 http://www.eucalyptus.com/schema/cloud/1.6/euca.xsd">

<spring:beans>
<spring:import resource="classpath:component-services.xml"/>
</spring:beans>
<euca:endpoint name="ComponentWS"
connector-ref="eucaws"
address="http://127.0.0.1:8773/services/Component" />
<euca:endpoint name="ComponentInternalWS"
connector-ref="eucaws"
address="http://127.0.0.1:8773/internal/ComponentInternal"
synchronous="true" />

<endpoint name="ComponentVM" address="vm://Component" synchronous="false" />
<endpoint name="ComponentInternalVM" address="vm://ComponentInternal" synchronous="true" />

<model name="component">
<model name="component">

<default-service-exception-strategy>
<outbound-endpoint ref="ReplyQueueEndpoint" />
</default-service-exception-strategy>
<default-service-exception-strategy>
<outbound-endpoint ref="ReplyQueueEndpoint" />
</default-service-exception-strategy>

<service name="ComponentRequestQueue">
<inbound>
<vm:inbound-endpoint ref="ComponentRequestQueueEndpoint" />
</inbound>
<bridge-component />
<outbound>
<filtering-router>
<outbound-endpoint ref="ComponentWS" />
<payload-type-filter
expectedType="edu.ucsb.eucalyptus.msgs.ComponentMessageType" />
</filtering-router>
</outbound>
</service>
<service name="ComponentRequestQueue">
<inbound>
<vm:inbound-endpoint ref="ComponentRequestQueueEndpoint" />
</inbound>
<bridge-component />
<outbound>
<outbound-pass-through-router>
<outbound-endpoint ref="ComponentVM" />
</outbound-pass-through-router>
</outbound>
</service>

<service name="Component">
<inbound>
<inbound-endpoint ref="ComponentWS" />
</inbound>
<component class="com.eucalyptus.cloud.ws.ComponentService" />
<outbound><!--
<filtering-router>
<outbound-endpoint ref="StorageRequestQueueEndpoint" />
<payload-type-filter
expectedType="edu.ucsb.eucalyptus.msgs.StorageComponentMessageType" />
</filtering-router>
<filtering-router>
<outbound-endpoint ref="WalrusRequestQueueEndpoint" />
<payload-type-filter
expectedType="edu.ucsb.eucalyptus.msgs.WalrusComponentMessageType" />
</filtering-router>
--><filtering-router>
<outbound-endpoint ref="ReplyQueueEndpoint" />
<payload-type-filter
expectedType="edu.ucsb.eucalyptus.msgs.ComponentMessageResponseType" />
</filtering-router>
</outbound>
</service>
</model>
<model name="component-internal">
<service name="ComponentInternal">
<inbound>
<inbound-endpoint ref="ComponentInternalWS" />
<inbound-endpoint ref="ComponentInternalVM" />
</inbound>
<component class="com.eucalyptus.cloud.ws.ComponentService" />
</service>
</model>
<service name="Component">
<inbound>
<inbound-endpoint ref="ComponentVM" />
</inbound>
<component class="com.eucalyptus.cloud.ws.ComponentService" />
<outbound>
<filtering-router>
<outbound-endpoint ref="ReplyQueueEndpoint" />
<payload-type-filter expectedType="edu.ucsb.eucalyptus.msgs.ComponentMessageResponseType" />
</filtering-router>
</outbound>
</service>
</model>
<model name="component-internal">
<service name="ComponentInternal">
<inbound>
<inbound-endpoint ref="ComponentInternalWS" />
<inbound-endpoint ref="ComponentInternalVM" />
</inbound>
<component class="com.eucalyptus.cloud.ws.ComponentService" />
</service>
</model>
</mule>

0 comments on commit e0a732d

Please sign in to comment.