I still think this is the wrong way to implement the Whirr integration. On 9/23/13 6:45 AM, "sebgoa" <run...@gmail.com> wrote:
> >On Sep 23, 2013, at 7:12 AM, Darren Shepherd ><darren.s.sheph...@gmail.com> wrote: > >> The only way this will get committed is if we either move to latest >>gson or >> jackson. Regardless, the outcome will be that Meng can assume this gson >> conflict won't happen. The problem is just how fast can we move all of >>ACS >> to a new json library. Is it possible for Meng to commit to a branch >>that >> just blindly updates gson to the latest (in /pom.xml). > >Yes I will talk to Meng about this. thanks > >> When we get ACS on >> a newer json library, we can merge in that branch. Tomorrow (9/23), I >>can >> attempt to put together a patch to move to jackson. I think I ironed >>out >> most of the technical issues so I just have to globally apply the >>changes. >> >> Darren >> >> >> On Fri, Sep 20, 2013 at 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.**RouterPrivateIpStrateg >>>>>>>y" >>>>>>>>>>> :"** >>>>>>>>>>> >>>>>>>>>>>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":"**LibvirtComputingResourc >>>>>>>>>>>e >>>>>>>>>>> ","** >>>>>>>>>>> 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 >>>>>>>> >>>>>>>> >>>> >>> >>> >