Of course there is a difference between "not much" and NO difference.
Can we be more precise?

On 1/3/13 10:57 AM, "Fang Wang" <fang.w...@citrix.com> wrote:

>Hi,
>
>It won't affect the client side API.
>It mainly help to make internal CS code modular, and do access check as
>early as possible.
>For external users, there is not much difference.
>
>Thanks,
>-Fang
>
>-----Original Message-----
>From: sebgoa [mailto:run...@gmail.com]
>Sent: Friday, December 28, 2012 2:16 AM
>To: cloudstack-dev@incubator.apache.org
>Cc: Rohit Yadav
>Subject: Re: API Updates: Tracking progress, changes
>
>Hi Rohit,
>
>I have been following the thread but I have a silly question, maybe you
>can help clear my confusion :)
>
>Does your work impact the client side API ?
>Meaning if I am using jclouds, boto, python-cloudstack etc....as clients.
>Will my client codes break with this API changes ?
>
>-Sebastien
>
>On Dec 28, 2012, at 11:01 AM, Rohit Yadav wrote:
>
>> Some recent updates:
>> 
>> - Make over the wire apis params validation/translation as before
>> thereby making changes status quo with master, only enforce uuid param
>> validation for apis introduce since 3.x
>> - Annotate name field in @APICommand for all cmd classes, now we can
>> get rid of apiname, cmd class pkg name mappings from
>> *command.properties.in file
>> - Fixed apidocs, build
>> 
>> Regards.
>> ________________________________________
>> From: Rohit Yadav
>> Sent: Friday, December 28, 2012 1:18 AM
>> To: cloudstack-dev@incubator.apache.org
>> Subject: Re: API Updates: Tracking progress, changes
>> 
>> On 27-Dec-2012, at 7:32 AM, David Nalley <da...@gnsa.us> wrote:
>> 
>>> On Mon, Dec 24, 2012 at 10:09 PM, Rohit Yadav <rohit.ya...@citrix.com>
>>>wrote:
>>>> Hi Alex,
>>>> 
>>>> We got rid of IdentityMapper and enforced the translation of over the
>>>>wire UUID string to internal long int ID, so we know if internal IDs
>>>>are used in any case starting 4.1 it will break any client, script
>>>>that are based off internal ID and not UUID strings. Few folks on the
>>>>ML have expressed concerns, but we need this change and to enforce
>>>>that we won't have any backward compatibility for over the wire api
>>>>params to accept internal IDs.
>>>> 
>>> 
>>> 
>>> I read this, and am left more confused than before.
>>> There have been assurances regarding the refactor that no API changes
>>> have occurred, but the above seems to contradict that.
>>> I'll apologize for being daft (and for not going in and looking at
>>> the
>>> changes) but can you tell me:
>>> 1. what the changes to the API are?
>> 
>> Changes to the API: None, for any over the wire request no params have
>>been added or removed, nor any api cmd/response was added or removed.
>> 
>> Enforcement on the APIs: All id params should be UUID strings. This
>>should have been done since 3.x, but the changes listed below enforce
>>that.
>> 
>> Changes in API Server, OTW param processing etc:
>> 0. Moving classes to org.apache.cloudstack.* package name, this does
>>not change anything just imports in depending classes.
>> 1. In all cmd classes: Annotate @Parameter to have correct type,
>>entityType, collectionType, remove @IdentityMapper annotation. This
>>changes interfaces, processing of those annotations and fix any caller.
>>Therefore this change is refactoring [1]. Any @Parameter annotation with
>>CommandType UUID is considered a case where OTW param string needs to be
>>translated to an InternalId. In CloudStack we use internal db ids and
>>not uuids, implemented a getUuid() in EntityManagerImpl.
>> 2. List apis and response view optimizations by Min, optimizations in
>>this case are considered refactoring as well [1] [2].
>> 3. Deduplication of code by moving them into methods, this does not
>>change any functionality either, just refactoring.
>> 4. ACL adapter and adapter interface definitions, work by Prachi.
>>Separate out ACL and DB/Range validation code, define interfaces for the
>>adapter, move implementations as plugin. Again, refactoring.
>> 5. Rename @Implementation annotation to @APICommand, introduce a new
>>name field. This name field can tightly couple API name to the cmd
>>class, right now this info is insecurely coupled in commands.properties
>>file where the mapping of apiname=<pkg name>.cmdclass:mask is defined.
>>In future we would only have apiname and role masks which will
>>constitute all whitelisted apis i.e. if api is not declared in
>>commands.properties file, it's blacklisted. This would also enforce
>>uniqueness of api command name.
>> 
>>> 2. Why 'we need this change'?
>> 
>> Why:
>> 0. Refactoring was needed, as explained above.
>> 1. There was a ticket on JIRA (cannot recall the id) to move classes
>>under org.apache.cloudstack pkg name.
>> 2. Move out policy from CloudStack as plugin so orgs can impl. their
>>own role based and ACL etc.
>> 3. Remove bloat, optimize OTW commands, esp. the responses.
>> 4. Make it easier for contributor to write plugin, apis.
>> 5. Remove code by refactoring acl, db validation code in one place
>>using annotations which is spread across api layer (cloud-api, parts of
>>cloud-server) and service layer (all the managers and managerimpls).
>> 
>>> 
>>> Breaking backward compatibility is a huge deal IMO. Even changes that
>>> technically didn't break compatibility but were different than folks
>>> expectations (when we introduced UUID) earned us much wailing and
>>> gnashing of teeth. Breaking other people's external tools that
>>> interact with CloudStack is something that shouldn't be done without
>>> much deliberation.
>> 
>> 
>> :( I've to be the bad guy here, but we need to enforce that params are
>>queried by uuids.
>> Okay I'll ask community for a vote on it, if we want to keep things
>>ambiguous and expose internal db ids to outside world the fix would be a
>>simple if-else block to allow both kinds of ids.
>> 
>> Regards.
>> 
>> [1] http://martinfowler.com/bliki/refactoring.html
>> [2] http://refactoring.com
>

Reply via email to