I can do some analysis on this.  I'm always up for a terribly painful
refactor :)

Darren


On Wed, Sep 18, 2013 at 4:06 PM, Alex Huang <alex.hu...@citrix.com> wrote:

> I actually did a quick try to update cloudstack to use newest gson version
> about 3 months back.  Had to roll it back but I didn't try very hard
> though.  Part of the reason why I decided to rollback is due to gson is
> used differently by various components in CloudStack and I didn't have time
> to get into each component to see if I break anything.  The other is also I
> thought using Jackson would be much better and thought our next attempt
> should be with Jackson.
>
> Not that any of these helps you.  Just know updating CloudStack to latest
> gson is not simple.
>
> --Alex
>
> > -----Original Message-----
> > From: Andrei Savu [mailto:savu.and...@gmail.com]
> > Sent: Wednesday, September 18, 2013 10:53 AM
> > To: d...@whirr.apache.org
> > Cc: dev@cloudstack.apache.org
> > Subject: Re: conflicting dependencies between CloudStack and Whirr
> >
> > It's easy to usr jclouds and whirr inside an OSGi container - just add
> the
> > feature url. Bonus: you can also use jclouds shell interface (part of
> jclouds cli).
> >
> > Another option is to upgrade the CloudStack API to use the new version.
> > On Sep 18, 2013 5:14 AM, "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.apa
> > che.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_**rnu5ZL1QeOWdw7a
> > ZRGXVO1VApG
> > > 6q0a
> > > **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.SEVER
> > > E,
> > > 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.SEVER
> > > E,
> > > 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