Adam Young wrote:
> On 10/19/2010 06:29 PM, Dmitri Pal wrote:
>> Rob Crittenden wrote:
>>   
>>> Adam Young wrote:
>>>     
>>>> I think I have an approach that will work for pacaking up multiple
>>>> commands at once.
>>>>
>>>>        
>>> Just want to mention that XML-RPC has a provision for doing multiple
>>> requests in a single HTTP request that has a similar format. We just
>>> don't support it currently.
>>>
>>> rob
>>>
>>>      
>> The approach makes sense but is it a lot of work?
>> I suggest we defer it till later and focus on the actual visible work.
>> If we have time we will do the optimization.
>> If this eliminates the need for the session cookie at least for now I am
>> Ok with deferring it too.
>>    
> It might be worthwhile to do this as part of Pavel's work on
> controlling access to the fields based on back end permissions.  We
> are packing more and more stuff into a single json_metadata call, but
> it will make things much easier for us if we can just make a single
> bulk call and parse out what we need.
>
> I'm most concerned with the approach being approved.
>

I approve but I want to get approval from Rob, Simo and Pavel too.
Please ack or nack this idea.

>
>
>>
>>   
>>>> Stage 1:
>>>>
>>>>
>>>> 1. We create a new plugin, we call it bulk. For now, it will speak
>>>> only
>>>> JSON.
>>>>
>>>> 2. The json requests look like this:
>>>>
>>>>
>>>> |{"method":"bulk","params":[[|
>>>> | {"method":"user_find","params":[[""],{}]},|
>>>> | {"method":"user_show","params":[[""],{}]},|
>>>> | {"method":"user_add","params":[[""],{}]},|
>>>> |{"method":"user_blah","params":[[""],{}]}|,
>>>> |],{"all":true,"sizelimit":100}],"id":2}|
>>>>
>>>>
>>>> This gets sent as a single json_request.
>>>>
>>>> On the server side, each request is pulled out of the params and the
>>>> common items all=true and sizelimit=100 is added to each request. The
>>>> resulting json request is then executed locally, without re-requiring
>>>> the kerberos auth. THe response from the individual requests are put
>>>> into the response array, like so:
>>>>
>>>> |{
>>>> || "error": null,
>>>> || "id": 2,
>>>> || "result": {
>>>> || "count": 1,
>>>> || "result": [{
>>>> || "error": null, //start of the response for the first nested
>>>> command.
>>>> || "id": 1,
>>>> || "result": {
>>>> || "count": 1,
>>>> || "result": [
>>>> || {
>>>> || "cn": [
>>>> || "Administrator"
>>>> || ],|
>>>>
>>>> ...
>>>>
>>>> Thus the plugin is responsible for processing each request,
>>>> marshalling
>>>> up the return and adding it to the current response.
>>>>
>>>>
>>>>
>>>>
>>>> Stage 2: we add an asynchronous mechanism. We add an option for the
>>>> email notification address to the bulk plugin. The response returns
>>>> immediately. Meanwhile, the plugin hands off the processing of the
>>>> initial request to a queue that will be handled by another thread or
>>>> process, and email the response to the address. Alternatively, we
>>>> email
>>>> back just an abbreviated status message.
>>>>
>>>>
>>>> Stage 3: Store the response in a filesystem or the DirSrv, and mail
>>>> back
>>>> a link that allows the user to fetch the status.
>>>>
>>>>
>>>>
>>>>
>>>> I really only care about Stage 1 for now. THe json_metadata plugin is
>>>> getting loaded up with too many unrelated calls in it. I'd like to be
>>>> able to craft and arbitraty message that gets sent and returned
>>>> with all
>>>> of the information required to initialize the IPA Web UI.
>>>>
>>>> user-find --whoami
>>>> json_metadata
>>>> I18N_messages
>>>> Effective rights
>>>> plugin lists (to enable/disable UI features based on what is active)
>>>>
>>>> While we would do this initially as a JSON only call, the XML-RPC
>>>> should
>>>> nest the same way. I leave it to Rob and Simo to figureo ut if this
>>>> would support the CLI, but it seems to me that it should be pretty
>>>> easy
>>>> to do:
>>>>
>>>>
>>>> ipa bulk
>>>>       
>>>>> ipa user-mod ...
>>>>> ipa user-del ...
>>>>> upa group-add ...
>>>>>          
>>>> ^D
>>>>
>>>> And have that sent as a single command, with the responses again
>>>> parsed
>>>> out by the cli. Then the user can do:
>>>>
>>>> cat mycommands | ipa bulk>  bulk.response
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Freeipa-devel mailing list
>>>> Freeipa-devel@redhat.com
>>>> https://www.redhat.com/mailman/listinfo/freeipa-devel
>>>>        
>>> _______________________________________________
>>> Freeipa-devel mailing list
>>> Freeipa-devel@redhat.com
>>> https://www.redhat.com/mailman/listinfo/freeipa-devel
>>>      
>>
>>    
>
> _______________________________________________
> Freeipa-devel mailing list
> Freeipa-devel@redhat.com
> https://www.redhat.com/mailman/listinfo/freeipa-devel
>
>


-- 
Thank you,
Dmitri Pal

Engineering Manager IPA project,
Red Hat Inc.


-------------------------------
Looking to carve out IT costs?
www.redhat.com/carveoutcosts/

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to