[Freeipa-devel] [PATCH 0112-7] Speeding up cli help

Jan Cholasta jcholast at redhat.com
Thu Jul 21 08:12:31 UTC 2016


Hi,

On 20.7.2016 14:32, David Kupka wrote:
> On 15/07/16 12:53, David Kupka wrote:
>> Hello!
>>
>> After Honza introduced thin client that builds plugins and commands
>> dynamically from schema client became much slower. This is only logical,
>> instead of importing a module client now must fetch the schema from
>> server, parse it and instantiate the commands using the data.
>>
>> First step to speed it up was addition of schema cache to client. That
>> removed the RTT and download time of fetching schema every time.
>>
>> Now the most time consuming task became displaying help for lists of
>> topics and command and displaying individual topics. This is simply
>> because of the need to instantiate all the commands to find the
>> relations between topics and commands.
>>
>> All the necessary bits for server commands and topics are already in the
>> schema cache so we can skip this part and generate help from it, right?
>> Not so fast!
>>
>> There are client plugins with commands and topics. So we can generate
>> basic bits (list of all topics, list of all commands, list of commands
>> for each topic) from schema and store it in cache. Then we need to go
>> through all client plugins and get similar bits for client plugins. Then
>> we can merge and print.
>>
>> Still the client response is not as fast as before and I this it even
>> can't be. Also first time you display particular topic or list takes
>> longer because it must be freshly generated and stored in cache for next
>> use. And this is what the attached patches do.
>>
>> https://fedorahosted.org/freeipa/ticket/6048
>
> Reimplemented so there is no need to distinguish client plugins and
> remote plugins.
> The main idea of this approach is to avoid creating instances of the
> commands just to get the information about topic, name and summary
> needed for displaying help. Instead class properties are used to access
> the information directly in schema.

Patch 0112:

I think this would better be done in Schema.read_namespace_member, 
because Schema is where all the state is.

(BTW does _SchemaNameSpace.__getitem__ raise KeyError for non-existent 
keys? It looks like it doesn't.)


Patch 0113:

How about setting _schema_cached to False in Schema.__init__() rather 
that getattr()-ing it in _ensure_cached()?


Patch 0116:

ClientCommand.doc should be a class property as well, otherwise .summary 
won't work on it correctly.

_SchemaCommand.doc should not be a property, as it's not needed for 
.summary to work on it correctly.


Otherwise works fine for me.

Honza

-- 
Jan Cholasta




More information about the Freeipa-devel mailing list