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