On 10/2/13 5:52 PM, "Darren Shepherd" <darren.s.sheph...@gmail.com> wrote:

>Kelvin,
>
>Also since I'm using dynamic proxies for AOP, spring is suppose to expose
>all interface of the target.  But I'll still dig in and make sure 100%
>this is all good. 
>
>Darren
>
>> On Oct 2, 2013, at 5:40 PM, Darren Shepherd
>><darren.s.sheph...@gmail.com> wrote:
>> 
>> I know the majority of the polymorphic stuff is working fine right now.
>> But now that you bring it up I'm kinda wondering why.

I brought it up just for cautious reason, since I know we have quite many
places that do run-time type check and casting, it relies heavily on the
semantic that the target object should be 100% compatible to real object
if there is proxy business involved.

One of the other reason is that since these are run-time checks, testing
without enough coverage may not reveal all the problems.

-Kelven


>>It very we'll be possible that the way in which I'm discovering
>>extensible types precludes it from AOP matching the beans.   (Which
>>isn't bad.  We should only use AOP for declarative transaction
>>management ideally.  AOP on a project this size is most always a bad
>>idea).  The AOP is far more selective now anyhow.  Only beans of
>>GenericDaoBase and those that have @ActionEvent are being matched which
>>isn't really any of the extensible types that require instanceof checks.
>> Regardless I'll dig into exactly what is happening and give you an
>>answer to be sure that issue won't hit us.
>> 
>> I've done extensive profiling on this.  The heap and permgen are
>>slightly less than what they used to be.  I've been running -Xmx256mb
>>for all my testing.  Heap analysis shows that with all plugins
>>(including noredist), permgen is at about 120mb and heap usage is about
>>150mb.  
>> 
>> Regarding the start up time, it is slightly slower.  It's about 5
>>seconds slower to start on my laptop than before.  I traced down the
>>problem to AOP.  Because I'm selectively looking for @ActionEvent it has
>>to evaluate every method on every bean, which is slow.  I know how to
>>optimize it such that the startup can actually be faster than what it
>>was before, but I really want to focus on correctness over speed right
>>now.  
>> 
>> Cglib is no longer used for AOP.  The only use of cglib now is in
>>GenericDaoBase when it creates the VOs and also in the async framework.
>> 
>> I should point out all of these changes apply only to the mgmt server.
>>Awsapi and usage server are untouched.  I did not have time to convert
>>them too.  So those still use ACS AOP and the monolithic config (which
>>uses component scanning, so nobody remove @Component unless your really
>>sure it's not used).
>> 
>> Darren
>> 
>>> On Oct 2, 2013, at 4:39 PM, Kelven Yang <kelven.y...@citrix.com> wrote:
>>> 
>>> Darren,
>>> 
>>> This looks really nice. A few questions on Spring AOP replacement.
>>> 
>>> 1) Spring AOP is proxy-based, the reason we ended up of using
>>>customized
>>> AOP is mainly due to that inside existing CloudStack codebase, we have
>>> many places that are doing run-time type-casting, the code in these
>>>places
>>> assumes a real object that implements all interfaces in the semantics
>>> context. At the time when I initially converted to Spring, I couldn't
>>> ensure that switching to proxy-based AOP can have 100% coverage for
>>>these
>>> run-time cases. What is your approach to address this run-time
>>> type-casting issue?
>>> 
>>> 2) We've run into a huge-memory footprint issue that may be caused by
>>> conflicts of CGLIB usage in Spring AOP and the CGLIB usage in
>>>CloudStack
>>> Dao layer. Do you have a chance to run a memory analysis in the heap
>>>after
>>> management server is started.
>>> 
>>> I might be good to run BVT test on the branch before the merge, could
>>> someone initiate the effort?
>>> 
>>> kelven
>>> 
>>> 
>>> 
>>>> On 10/2/13 3:48 PM, "Darren Shepherd" <darren.s.sheph...@gmail.com>
>>>>wrote:
>>>> 
>>>> Not sure how this works...  I would like to merge in the new
>>>> modularized Spring setup to master. There is info on the wiki about it
>>>> [1] [2] [3].  The primary change is to break apart the monolithic
>>>> applicationContext.xml and componentContext.xml files such that each
>>>> plugin can maintain and contribute its own configuration.
>>>> 
>>>> In addition to breaking up the configuration we no longer use ACS
>>>> custom AOP and it is now fully Spring AOP.
>>>> 
>>>> Now adding/removing a plug-in is a matter of just adding a jar to the
>>>> classpath (exception being commands.properties, I'll address that in a
>>>> different thread).  Unfortunately this branch does not have the
>>>> changes to package things in different RPMs.  So it would be great if
>>>> somebody could take up the packaging effort to split out all the
>>>> plugins into different RPMs.
>>>> 
>>>> Darren
>>>> 
>>>> [1] 
>>>> 
>>>>https://cwiki.apache.org/confluence/display/CLOUDSTACK/Modularize+Sprin
>>>>g
>>>> [2] 
>>>> 
>>>>https://cwiki.apache.org/confluence/display/CLOUDSTACK/Plug-ins%2C+Modu
>>>>les
>>>> %2C+and+Extensions
>>>> [3] https://cwiki.apache.org/confluence/display/CLOUDSTACK/Extensions
>>> 

Reply via email to