Thanks for explanation,

How does CS handle ID->UUID translation in response object?

Anthony

> -----Original Message-----
> From: Min Chen [mailto:min.c...@citrix.com]
> Sent: Wednesday, December 19, 2012 10:13 PM
> To: cloudstack-dev@incubator.apache.org
> Subject: Re: [REVIEW/PROPOSAL/DISCUSS] API refactoring story: goal and
> notes
> 
> Here Fang is talking about UUID translation to DB_ID in constructing
> our
> Command class (ApiDispatcher.setupParameters), not in generating
> response
> object, so it will not impact list api performance.
> 
> Thanks
> -min
> 
> On 12/19/12 10:07 PM, "Anthony Xu" <xuefei...@citrix.com> wrote:
> 
> >>2.  The API layer provides a translation from the UUID to the
> internal
> >>DB_ID to the DB entity, but this translation is done internally.
> Outside
> >>users will never see DB_ID. Before the response is sending back by CS,
> >>API layer replaces the internal DB_ID with the UUID.
> >
> >I thought ID->UUID translation in API layer is a workaround, since it
> >might cause list API performance issue.
> >Any plan to fix it completely in backend?
> >
> >
> >Anthony
> >
> >> -----Original Message-----
> >> From: Fang Wang [mailto:fang.w...@citrix.com]
> >> Sent: Wednesday, December 19, 2012 10:02 PM
> >> To: cloudstack-dev@incubator.apache.org
> >> Subject: RE: [REVIEW/PROPOSAL/DISCUSS] API refactoring story: goal
> and
> >> notes
> >>
> >> Prachi did an excellent FS document for this, and I added the high
> >> level goals section
> >> To her FS link at wiki:
> >>
> >>
> https://cwiki.apache.org/confluence/display/CLOUDSTACK/CloudStack+API+r
> >> efactoring
> >>
> >> Lots of implementation details are covered in the FS. We'll update
> it
> >> along the way.
> >> Thanks,
> >> -Fang
> >>
> >> -----Original Message-----
> >> From: Fang Wang [mailto:fang.w...@citrix.com]
> >> Sent: Wednesday, December 19, 2012 9:46 PM
> >> To: cloudstack-dev@incubator.apache.org
> >> Subject: [REVIEW/PROPOSAL] API refactoring story: goal and notes
> >>
> >> Hi all,
> >> After answering questions about why/what we are doing to API
> >> refactoring, I'll add this to the FS document.
> >> Probably lots of people are not clear what is our motivation and
> what
> >> we want to achieve here.
> >> (Will add this to the wiki page. )
> >>
> >> The goal of the API refactoring
> >> To make the system more modular and dynamic, API refactoring is part
> of
> >> the 4.1 new architecture efforts.
> >> Another goal is to allow developers and partners to quickly add
> plugins
> >> and new service modules and access control, making cloudstack more
> >> adaptive.
> >> I am new on this as well In the beginning, I do not know too much
> about
> >> it. Now after working on API refactoring, I got a better
> understanding
> >> of the existing problems and our solutions. The solution is not the
> >> final perfect solution, for sure, feedback and suggestion is always
> >> welcome to make it a much better and adaptive product.
> >>
> >> Current problem:
> >> 1. Security and access check is lying around in different layers.
> >> For example, in apiSevlet we check the web access username/password
> >> credentials, apiServer checks the command existence, and several
> other
> >> checks, then the DB access check mainly is done at the service layer.
> >> So it is hard for developers and system admin to follow all the
> access
> >> and validations, to make sure all the checks are done correctly. To
> do
> >> it, developers need to be familiar with the various parts of the CS
> >> code.
> >>
> >> 2. Static: Majority of the DB access check and security validation
> >> is tightly coupled with the lower layer service class. This not only
> >> made the code hard to follow, also inherently made the policy static.
> >> This makes it impossible for system admin to apply a different
> security
> >> policy adaptively. If one wants to adopt a different policy, not
> only
> >> he needs to understand code scattered around, he also needs to
> rebuild
> >> the CS after any changes.  Any security role modification is not
> >> dynamic.
> >>
> >> 3. Performance implication: Access check done at the lower service
> >> layer makes the error code path long.
> >>
> >> 4. Docs generated, CLI and APIs are loosely coupled.
> >>
> >> 5. Over the wire(OTW) entity is not well defined. For example, to
> >> listVMsCmd, it involves multiple DB access, with the large amount of
> >> data showing NICs, Vols, Secondary storage etc, the command can take
> >> quite a while.
> >>
> >> 6. Admin and user have basically the same end-point access.
> >>
> >>        The goal of the API refactoring is aiming to tackle these
> >> problems:
> >>
> >> 1. We would pull security checks, DB access checks, any related
> >> checks up from service layer/orchestration engine to the API layer
> as
> >> much as possible. This makes the necessary checking done more
> >> centralized and easy to follow. Conceptually the cloud orchestration
> >> engine layer handles the orchestration, the security check and the
> >> access check should have done before reaching this layer. This has
> >> performance benefits, since checks are done earlier instead of
> reaching
> >> deep in the code path; this also has the benefits of a clear
> >> architecture. The API layer does the necessary access check and role
> >> based authentication, makes it easier and dynamic for future policy
> >> change. New policy can be added easily and dynamically as a plugin
> to
> >> the system.
> >>
> >> 2. The ACL and security checks also are written as adapter plugins,
> >> hence make them dynamic. Users and developers and easily adapt new
> >> policy if needed. This made the code more modular and more adaptive.
> >>
> >> 3. Help improves performance: Instead of finding access error layer
> >> into the service layer, by doing 1, we would do possible checks
> early
> >> in the code path, which helps stop the wrong access earlier in the
> code
> >> path.
> >>
> >> 4. API layer is more tightly coupled with Doc generation, and CLI.
> >> Related commands are grouped together, and the new @Doc annotation
> will
> >> help show the related commands in document.
> >>
> >> 5. We define new view objects as response objects, avoiding big DB
> >> joins at run time.
> >>
> >> 6. Separate the admin and user APIs. This is for developers to
> >> understand the code, which should be accessible by users, which
> should
> >> only be handled by Admin.  Hence developers will have better grasp
> of
> >> the role and pay attention to the new code added. It also helps the
> >> document generated.
> >>
> >>        Notes:
> >> 1. For end users, the new APIs after refactoring looks pretty much
> >> the same. One big change is the ID, we will always use UUID in the
> over
> >> the wire APIs. The UUID can be created by Cloudstack, or can be
> >> provided by users (we call it Xid - external ID). Every UUID should
> be
> >> unique in the cloudstack system.
> >>
> >> 2. The API layer provides a translation from the UUID to the
> >> internal DB_ID to the DB entity, but this translation is done
> >> internally. Outside users will never see DB_ID. Before the response
> is
> >> sending back by CS,  API layer replaces the internal DB_ID with the
> >> UUID.
> >>
> >> 3. In original FS document, the annotation of entityType in
> >> @Parameter points to a resource class, this is replaced by a
> response
> >> class. So entityType points to a response object, and the response
> >> class has a one-to-one mapping from the response to the physical
> entity
> >> itself. This translation work is done by the API layer and the
> >> entityManagerImpl.
> >>
> >> 4. The packages for the new API commands are all moved from the
> >> current com.cloud.api.commands to new location:
> >> org.apache.cloudstack.api.commands.user.[group name]
> >> org.apache.cloudstack.api.commands.admin.[group_name]
> >>
> >> The responses are also moved to new location at
> >> org.apache.cloudstack.api.response
> >>
> >> More implementation details can refer to the FS document. We will
> also
> >> update the document along the way. The code is branch from master at
> >> api_refactoring.  Since the change is not minimum, we would like the
> >> community to know and give feedback.
> >>
> >> Thanks,
> >> -Fang
> >>
> >>

Reply via email to