I don't think adding an API to CloudStack is particularly appropriate way to integrate with whirr? Whirr should *use* the CloudStack API, not add to it?
On 9/20/13 1:09 AM, "Sebastien Goasguen" <run...@gmail.com> wrote: > >On Sep 20, 2013, at 12:45 AM, Hugo Trippaers <h...@trippaers.nl> wrote: > >> >> The Nicira NVP plugin is also depending on gson. If we make any changes >>we need to validate against their api to ensure that the interface still >>works. >> >> If we put the changes in a separate branch i'd be happy to run the >>changes against the api. >> >> Cheers, >> >> Hugo > >So how can Meng get out of this bind, she is trying to complete her >google summer of code project. > >thanks, > >-Sebastien > >> >> >> On Sep 20, 2013, at 12:08 PM, Darren Shepherd >><darren.s.sheph...@gmail.com> wrote: >> >>> After much searching I found the two lines of code I needed to get it >>>to serialize right. I'll keep looking and see if I find other snags. >>>Maybe we can just move to jackson.... we'll see, haven't tried to >>>deserialize yet. >>> >>> Darren >>> >>>> On Sep 19, 2013, at 4:25 PM, Alex Huang <alex.hu...@citrix.com> wrote: >>>> >>>> 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 >>>>>> >>>>>> >> >