[openstack-dev] [nova][heat][[keystone] RFC: introducing "request identification"

Mitsuru Kanabuchi kanabuchi.mitsuru at po.ntts.co.jp
Fri Nov 22 12:30:20 UTC 2013


On Tue, 19 Nov 2013 12:03:57 -0500
Adam Young <ayoung at redhat.com> wrote:

> On 11/19/2013 08:21 AM, Dolph Mathews wrote:
> > Related BP:
> >
> >   Create a unified request identifier
> > https://blueprints.launchpad.net/nova/+spec/cross-service-request-id

I interested in cross-service-request-id because it has potential to
solve several problem.

I believe that API-retry would improve reliability of processing
especially in HA environment.
But it has fundamental problem what POST methods isn't idempotent.
In my understand, currently, a lot of OpenStack API caller doesn't
API-retry to avoid problem when do POST and response was lost.

For reference:
  https://wiki.openstack.org/wiki/Support-retry-with-idempotency

I think id has to be something passed in by the client is essential
part of to solve that problem.
And I recently found that cross-service-request-id could realize
that objective. It is really nice idea.

I understand, currently cross-service-request-id's objective is for
debugging. It is very useful.
In addition, I think that cross-service-request-id can use for
ensuring POST idempotent.
If the service received known cross-service-request-id, the service
just return existence resource-id to clients.
And the service don't create new resource.

I understand it's need several considerations.
(Please refer the thread of
 [Heat]Updated summit etherpad: API-retry-with-idempotency)

However, basically it's good function for reliability.
What do you think about it?


> And we have discussed  workplans as well, which would be data to be 
> carried along with the request id
> 
> https://blueprints.launchpad.net/keystone/+spec/delegation-workplans
> https://etherpad.openstack.org/keystone_workplans
> 
> >
> > On Tue, Nov 19, 2013 at 5:04 AM, haruka tanizawa <harubelle at gmail.com 
> > <mailto:harubelle at gmail.com>> wrote:
> >
> >     Hi stackers!!
> >
> >     I'd like to ask for your opinions about my idea of identifying
> >     request.
> >
> >     Challenges
> >     ==========
> >
> >     We have no way to know the final result of an API request.
> >     Indeed we can continuously get the status of allocated resources,
> >     but this is just resource status, not request status.
> >
> >     It doesn't matter so much for manual operations.
> >     But it does for automated clients like heat.
> >     We need request-oriented-status and it should be disclosed to clients.
> >
> >     Literally, we need to address two items for it.
> >      1. how to identify request from clients
> >      2. how to disclose status of request to clients
> >
> >     Note that this email includes only 1 for initiating the discussion.
> >     Also, bp:instance-tasks-api[0] should include both two items above.
> >
> >     Proposal: introducing "request identification"
> >     =============================================
> >
> >     I'd like to introduce "request identification", which is disclosed
> >     to clients.
> >     There are two characteristics:
> >
> >      - "request identification" is unique ID for each request
> >        so that we can identify tell a specific request from others.
> >      - "request identification" is available for clients
> >        so that we can enable any after-request-operations like check,
> >     retry[1] or cancel[2].
> >        (of course we need to add more logic for check/retry/cancel,
> >         but I'm pretty sure that indentifying request is the starting
> >     point for these features)
> >
> >     In my understandings, main objections should be 'who should
> >     generate and maintain such IDs?'.
> >
> >     How to implement "request identification"
> >     =========================================
> >
> >     There are several options at least. (See also recent discussion at
> >     openstack-dev[3])
> >
> >     1. Enable user to provide his/her own "request identification"
> >     within API request.
> >        This should be the simplest way. But providing id from outside
> >     looks hard to be accepted.
> >        For example, Idempotency for OpenStack API[4].
> >        Or instance-tasks-api enable to user to put his/her own
> >     "request identification".
> >
> >     2. Use correlation_id in oslo as "request identification".
> >        correlation_id looks similar concept of "request indentification",
> >        but correlation_id in nova was already rejected[5].
> >
> >     3. Enable keystone to generate "request identification" (we can
> >     call it 'request-token', for example).
> >        Before sending actual API request to nova-api, client sends a
> >     request to keystone to get 'request-token'.
> >
> >
> > -2
> >
> >        Then client sends an actual API request with 'request-token'.
> >        Nova-api will consult it to keystone whether it was really
> >     generated.
> >        Sounds like a auth-token generated by keystone, differences are:
> >          [lifecycle] auth-token is used for multiple API requests
> >     before it expires,
> >             'request-token' is used for only single API request.
> >          [reusing] if the same 'request-token' was specified twice or
> >     more times,
> >             nova-api simply returns 20x (works like client token in
> >     AWS[6]).
> >             Keystone needs to maintain 'request-tokens' until they expire.
> >        For backward compatibility, actual API request without
> >     'request-token' should work as before.
> >        We can consider several options for uniqueness of 'request-token':
> >          uuid, any string with uniqueness per tennant, etc.
> >
> >     IMO, since adding new implementation to Keystone is a little bit
> >     hard work,
> >     so implement of 1 is reasonable for me, just idea.
> >
> >     Any comments will be appreciated.
> >
> >     Sincerely, Haruka Tanizawa
> >
> >     [0] https://blueprints.launchpad.net/nova/+spec/instance-tasks-api
> >     [1] https://wiki.openstack.org/wiki/Support-retry-with-idempotency
> >     [2] https://blueprints.launchpad.net/nova/+spec/cancel-swap-volume
> >     [3]
> >     http://www.mail-archive.com/openstack-dev@lists.openstack.org/msg09023.html
> >     [4]
> >     https://blueprints.launchpad.net/nova/+spec/idempotentcy-client-token
> >     [5] https://review.openstack.org/#/c/29480/
> >     [6]
> >     http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html
> >
> >
> >     _______________________________________________
> >     OpenStack-dev mailing list
> >     OpenStack-dev at lists.openstack.org
> >     <mailto:OpenStack-dev at lists.openstack.org>
> >     http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> >
> >
> >
> >
> > -- 
> >
> > -Dolph
> >
> >
> > _______________________________________________
> > OpenStack-dev mailing list
> > OpenStack-dev at lists.openstack.org
> > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

--------------------
  Mitsuru Kanabuchi
    NTT Software Corporation
    E-Mail : kanabuchi.mitsuru at po.ntts.co.jp




More information about the OpenStack-dev mailing list