Darren, When I looked into updating to the latest gson, the problem, IIRC, is things that weren't considered cyclical dependencies are suddenly considered cyclical with the latest. I don't recall where though.
--Alex > -----Original Message----- > From: Darren Shepherd [mailto:darren.s.sheph...@gmail.com] > Sent: Thursday, September 19, 2013 1:33 PM > To: dev@cloudstack.apache.org > Subject: Re: conflicting dependencies between CloudStack and Whirr > > Alright, I looked into this and it will take a bit more work to switch to > Jackson. > The snag I hit was how we serialize commands for the agents. We use a > customer typeadatper in gson to produce a format like { "org.MyClass" > : {...} }. In jackson I don't see producing a similar format as being so > straight > forward. I'm sure there's an elegant solution, but I didn't immediately find > it. > The problem is if you use a custom serializer in jackson and do > writeObjectField(x.getClass().getName(), x), you'll get stuck in a loop > because it will call your serializer again. So if somebody can figure out > how to > do this format easily in jackson, the rest looks simple enough. > > So, being that it is not an obvious switch to using jackson, what is the > impact > of moving to the latest gson? What were the issue encountered when > people tried it before? > > Darren > > > On Wed, Sep 18, 2013 at 4:42 PM, Darren Shepherd < > darren.s.sheph...@gmail.com> wrote: > > > 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.SE > >> > VER > >> > > 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.SE > >> > VER > >> > > 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 > >> > > > >> > > > >> > > > >> > > > >