Good question. The gson dependency in Whirr is coming from jclouds, and
jclouds is very particular about its gson dependencies. Any possibility of
using isolated classloaders in some way?

A.


On Tue, Sep 17, 2013 at 7:14 PM, Han,Meng <meng...@ufl.edu> wrote:

> Dear all,
>
> I am adding an API to CloudStack which utilizes Whirr to launch various
> clusters on CloudStack. Now I am facing a dependency conflicting issue.
>
> Whirr 0.8.2 requires gson 2.2.2 while CloudStack API requires gson 1.7.1.
> If I use gson 1.7.1 for Whirr, the following error will happen:
>
> com.google.common.util.**concurrent.ExecutionError: 
> java.lang.**NoClassDefFoundError:
> com/google/gson/TypeAdapter
>
> This TypeAdapter class can be found inside gson-2.2.2.jar. However if I
> modify CloudStack to use gson 2.2.2 CloudStack will not build successfully
> due to the following test error.
>
> [INFO] Building Apache CloudStack Core 4.1.1
> [INFO] ------------------------------**------------------------------**
> ------------
> [INFO]
> [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ cloud-core ---
> [INFO] Deleting /home/meng/cloudstack/core/**target
> [INFO]
> [INFO] --- maven-remote-resources-plugin:**1.3:process (default) @
> cloud-core ---
> [INFO]
> [INFO] --- maven-resources-plugin:2.5:**resources (default-resources) @
> cloud-core ---
> [debug] execute contextualize
> [INFO] Using 'UTF-8' encoding to copy filtered resources.
> [INFO] skip non existing resourceDirectory /home/meng/cloudstack/core/**
> src/main/resources
> [INFO] Copying 3 resources
> [INFO]
> [INFO] --- maven-compiler-plugin:2.5.1:**compile (default-compile) @
> cloud-core ---
> [INFO] Compiling 156 source files to /home/meng/cloudstack/core/**
> target/classes
> [INFO]
> [INFO] --- maven-resources-plugin:2.5:**testResources
> (default-testResources) @ cloud-core ---
> [debug] execute contextualize
> [INFO] Using 'UTF-8' encoding to copy filtered resources.
> [INFO] skip non existing resourceDirectory /home/meng/cloudstack/core/**
> src/test/resources
> [INFO] Copying 3 resources
> [INFO]
> [INFO] --- maven-compiler-plugin:2.5.1:**testCompile
> (default-testCompile) @ cloud-core ---
> [INFO] Compiling 1 source file to /home/meng/cloudstack/core/**
> target/test-classes
> [INFO]
> [INFO] --- maven-surefire-plugin:2.12:**test (default-test) @ cloud-core
> ---
> [INFO] Surefire report directory: /home/meng/cloudstack/core/**
> target/surefire-reports
>
> ------------------------------**-------------------------
>  T E S T S
> ------------------------------**-------------------------
> Running com.cloud.agent.transport.**RequestTest
> log4j:WARN No appenders could be found for logger
> (com.cloud.agent.transport.**RequestTest).
> log4j:WARN Please initialize the log4j system properly.
> log4j:WARN See 
> http://logging.apache.org/**log4j/1.2/faq.html#noconfig<http://logging.apache.org/log4j/1.2/faq.html#noconfig>for
>  more info.
> Tests run: 4, Failures: 1, Errors: 1, Skipped: 0, Time elapsed: 3.054 sec
> <<< FAILURE!
>
> Results :
>
> Failed tests:   testSerDeser(com.cloud.agent.**transport.RequestTest)
>
> Tests in error:
>   testLogging(com.cloud.agent.**transport.RequestTest)
>
> Tests run: 4, Failures: 1, Errors: 1, Skipped: 0
>
>
> I ran "mvn -P developer clean install -DskipTests" , the CloudStack
> building process went through. But when I issued an API --launchCluster to
> CloudStack, the following error related to gson popped up on CloudStack
> Management Server:
>
> ERROR [agent.transport.Request] (AgentManager-Handler-2:) Caught problem
> with [{"StartupRoutingCommand":{"**cpus":2,"speed":3000,"memory":**
> 3844370432,"dom0MinMemory":**384437043,"poolSync":false,"**
> vms":{"v-2-VM":{"state":"**Running"},"s-1-VM":{"state":"**
> Running"},"r-4-VM":{"state":"**Running"}},"caps":"hvm,**
> snapshot","pool":"/root","**hypervisorType":"KVM","**
> hostDetails":{"com.cloud.**network.Networks.**RouterPrivateIpStrategy":"**
> HostLocal","Host.OS":"CentOS",**"Host.OS.Kernel.Version":"2.6.**
> 32-358.el6.x86_64","Host.OS.**Version":"6.4"},"type":"**
> Routing","dataCenter":"1","**pod":"1","cluster":"1","guid":**
> "a7320748-6346-3c9a-975e-**90ac4ae4a986-**LibvirtComputingResource","**
> name":"meng.acis.ufl.edu","id"**:2,"version":"4.1.1","**
> publicIpAddress":"10.244.18.**55","publicNetmask":"255.0.0.**
> 0","publicMacAddress":"00:23:**ae:94:f7:22","**
> privateIpAddress":"10.244.18.**55","privateMacAddress":"00:**
> 23:ae:94:f7:22","**privateNetmask":"255.0.0.0","**
> storageIpAddress":"10.244.18.**55","storageNetmask":"255.0.0.**
> 0","storageMacAddress":"00:23:**ae:94:f7:22","resourceName":"**
> LibvirtComputingResource","**gatewayIpAddress":"!
> 10.244.18
> .1","contextMap":{},"wait":0}}**,{"StartupStorageCommand":{"**
> totalSize":0,"poolInfo":{"**uuid":"9447c0b1-cc3f-439f-**
> 85f6-13d35539a9ed","host":"10.**244.18.55","localPath":"/var/**
> lib/libvirt/images/","**hostPath":"/var/lib/libvirt/**
> images/","poolType":"**Filesystem","capacityBytes":**
> 52844687360,"availableBytes":**41535332352},"resourceType":"**
> STORAGE_POOL","hostDetails":{}**,"type":"Storage","dataCenter"**
> :"1","pod":"1","guid":"**a7320748-6346-3c9a-975e-**90ac4ae4a986-**
> LibvirtComputingResource","**name":"meng.acis.ufl.edu","id"**
> :2,"version":"4.1.1","**resourceName":"**LibvirtComputingResource","**
> contextMap":{},"wait":0}}]
> java.lang.ClassCastException: 
> com.google.gson.internal.$**Gson$Types$**GenericArrayTypeImpl
> cannot be cast to java.lang.Class
>         at com.cloud.agent.transport.**ArrayTypeAdaptor.deserialize(**
> ArrayTypeAdaptor.java:84)
>         at com.cloud.agent.transport.**ArrayTypeAdaptor.deserialize(**
> ArrayTypeAdaptor.java:37)
>         at com.google.gson.**TreeTypeAdapter.read(**
> TreeTypeAdapter.java:58)
>         at com.google.gson.Gson.fromJson(**Gson.java:795)
>         at com.cloud.agent.transport.**Request.getCommands(Request.**
> java:235)
>         at com.cloud.agent.manager.**AgentManagerImpl$AgentHandler.**
> processRequest(**AgentManagerImpl.java:1221)
>         at com.cloud.agent.manager.**AgentManagerImpl$AgentHandler.**
> doTask(AgentManagerImpl.java:**1374)
>         at com.cloud.agent.manager.**ClusteredAgentManagerImpl$**
> ClusteredAgentHandler.doTask(**ClusteredAgentManagerImpl.**java:659)
>         at com.cloud.utils.nio.Task.run(**Task.java:83)
>         at java.util.concurrent.**ThreadPoolExecutor.runWorker(**
> ThreadPoolExecutor.java:1110)
>         at java.util.concurrent.**ThreadPoolExecutor$Worker.run(**
> ThreadPoolExecutor.java:603)
>         at java.lang.Thread.run(Thread.**java:722)
> WARN  [utils.nio.Task] (AgentManager-Handler-2:) Caught the following
> exception but pushing on
>
> On the CS Managment console I can see the cluster was started then quickly
> died.
> Running on provider cloudstack using identity
> h3DKHC9AVlhKnUhpyThMuLhC119QfN**QQ8xhyjbf_**rnu5ZL1QeOWdw7aZRGXVO1VApG6q0a
> **K-A-tQRQsZFwnOXQ
> INFO  [whirr.actions.**BootstrapClusterAction] (729061754@qtp-385354117-0:)
> Bootstrapping cluster
> INFO  [whirr.compute.**BootstrapTemplate] (729061754@qtp-385354117-0:)
> Configuring template for bootstrap-hadoop-datanode_**hadoop-tasktracker
> INFO  [whirr.compute.**BootstrapTemplate] (729061754@qtp-385354117-0:)
> Configuring template for bootstrap-hadoop-namenode_**hadoop-jobtracker
> INFO  [whirr.compute.NodeStarter] (pool-4-thread-2:) Starting 1 node(s)
> with roles [hadoop-datanode, hadoop-tasktracker]
> INFO  [whirr.compute.NodeStarter] (pool-4-thread-4:) Starting 1 node(s)
> with roles [hadoop-namenode, hadoop-jobtracker]
> ...
> INFO  [whirr.actions.**DestroyClusterAction] (729061754@qtp-385354117-0:)
> Cluster hadoop destroyed
>
> I attached the debuging log to this email.
>
> The launchCluster API is simple, it calls the LaunchClusterCommand in
> Whirr to launch a cluster.
>
> LaunchClusterResponse response = new LaunchClusterResponse();
>         response.setObjectName("**launchCluster");
>         LaunchClusterCommand command = null;
>         try {
>             command = new LaunchClusterCommand();
>         } catch (Exception ex) {
>             
> Logger.getLogger(**LaunchClusterCmd.class.**getName()).log(Level.SEVERE,
> null, ex);
>         }
>         String[] args = new String[2];
>         args[0] = "--config";
>         args[1] = config;
>
>         try {
>             command.run(System.in, System.out, System.err,
> Arrays.asList(args));
>         } catch (Exception ex) {
>             
> Logger.getLogger(**LaunchClusterCmd.class.**getName()).log(Level.SEVERE,
> null, ex);
>         }
>          response.setResponseName(**getCommandName());
>          output = "successfully launched the cluster.";
>          response.setOutPut(output);
>          response.setAsync(Boolean.**FALSE);
>          this.setResponseObject(**response);
>
> Could someone help me out here? What would be a proper gson version for
> CloudStack and Whirr to run at the same time?
>
> Thanks loads.
>
> Best Regards,
> Meng
>
>
>

Reply via email to