Hi everyone,

I'm planning to merge api_refactoring branch on to master after 72 hour period 
which would be Monday EOD. Pl. go through the email, and previous threads on 
api refactoring rework and feel free to share your ideas, comments and vote to 
agree, disagree. If no one objects I would like to ask the git Santa to merge 
it on Christmas 25 Dec :D (after 72 hour window)

The reason why I want to merge around the next week is because I think we would 
have lower frequencies of emails, review requests and people contributing, 
hence I can move around a lot of code (mostly package renames to 
org.apache.cloudstack in cloud-api) and right now the merge conflicts are 
really minimum, about 100-200 lines. (A top level issues to track sub-issues: 
https://issues.apache.org/jira/browse/CLOUDSTACK-638)

What will be affected:
0. Any class in cloud-api and on api-layer only
1. Any class that imports from/to cloud-api's response and cmd classes

Some of the major changes that will be merged on master;
0. Over the wire (OTW) HTTP request to API server would send only UUID strings. 
All requests done via UUIDs (and not CloudStack's internal db's IDs). 
1. https://issues.apache.org/jira/browse/CLOUDSTACK-518 Fix @Parameter 
annotation to have annotation field to a Response class which would give us 
entities (interface to VO objects). This would get rid of all IdentityMapper 
using which was used earlier to get VO entities from an annotated table name. 
This helps us to translate OTW UUIDs to CloudStack's DB's internal IDs.
2. Separation of ACL Role access checker as an adapter, so organizations can 
implement their own role based access checking. The mechanism would exist in 
CloudStack's API server but policy checking is moved out of CloudStack. 
(https://issues.apache.org/jira/browse/CLOUDSTACK-639) This works, but was 
tough to get it right the first time, there is better way which I'll share 
before the merge.
3. Group APIs to org.apache.cloudstack.api.{command,response}.{entity1,entity2 
etc.} packages. This is mainly done for developers, so when they work on API 
layer they would know which api has what level of security and as they are 
grouped based on entity type, it will be easier to search. This was mostly file 
movement to org.apache.cloudstack.api package and helped us track couple of 
classes which are no longer needed. Another aim was to move from com.cloud to 
org.apache.cloudstack (only cloud-api for now).
4. Annotation work as described in 1., also for @ACL etc.
5. DB, ACL validation wip code
6. A lot of list api optimizations and response view work from our newest 
commiter, Min Chen. The aim is to simply response, right now for. example when 
we listVMs we don't want unnecessary (serialized) response objects which could 
be queried using uuids separately.

Pl. ask away any doubts, questions and concerns you may have. It was 
challenging for me as well to understand the functional spec, to know the 
why/what/how, and if you read the old threads you can tell I did not get it the 
first time.

A lot of annotation work is aimed to be completed over this weekend, so when 
the branch is finally merged it won't break any functionality. At present the 
branch is quite stable

Testing and how or why do it?
0. Prasanna, Meghna? can help us write few basic sets of unit tests and marvin 
integration tests for OTW requests. We already have few of their patches on rb.
1. We can also have drivers to automate tests (Prasanna can talk more on this 
and on his devcloud based continuous intergration server)
2. If I do it now, there would be a lot more eyes to point out bugs and I want 
more people to participate in the refactoring work.
3. Right now, it builds and runs fine with minimal breaks and no functionality 
breakage as most of the changes are only restricted to api-server (:cloud-api 
artifact). I'm able to deploy a zone etc. To make the UUID thing work, I've put 
in hardcoded (for. ex. projectId=-1 which should be a string uuid not a long 
int value -1) stuff that saves the UI from being broken which I'll remove after 
merging on master so UI engineers can help fix UI issues.

Lastly, I would like to thank Min for her amazing patches and optimization 
work, Prachi for her work on ACL, Fang, Prasanna, Likitha for their help with 
the refactoring work and for their contributions. Community for asking 
questions, raising issues and thanks to Alex for his guidance, reviews and 
kickass OOP concepts.

Ref;
http://www.slideshare.net/buildacloud/cloudstack-collaboration-conference-12-refactoring-cloud-stack
https://git-wip-us.apache.org/repos/asf?p=incubator-cloudstack.git;a=shortlog;h=refs/heads/api_refactoring
https://cwiki.apache.org/confluence/display/CLOUDSTACK/CloudStack+API+refactoring

Regards.
PS. will write a blog on it this weekend so folks can follow what's going on :)
PPS. maybe explain in a video

Reply via email to