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
>>>>> 
>>>>> 
> 

Reply via email to