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

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 <harube...@gmail.com <mailto:harube...@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@lists.openstack.org
    <mailto:OpenStack-dev@lists.openstack.org>
    http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




--

-Dolph


_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to