On Wed, Jan 07, 2015 at 11:07:05AM +0100, Pavel Březina wrote:
On 01/06/2015 03:59 PM, Dmitri Pal wrote:
>On 01/06/2015 05:54 AM, Jakub Hrozek wrote:
>>On Tue, Jan 06, 2015 at 11:31:55AM +0100, Pavel Březina wrote:
>>>>>*Users*
>>>>>Do we want also to have methods ListDomainUsers() and ListUsers()
>>>>>without
>>>>>the name filter?
>>>>To list all? What about using '*' for that?
>>>We can implement it this way internally, but exposing an easier way
>>>to the
>>>consumers is nice, imho.
>>I'm not too opposed, although I prefer minimal APIs.
>>
>>>However, do we actually want to allow to list all users? As Dmitri
>>>suggested
>>>we may want to require the minimum filter length since the number of
>>>users
>>>may be very high. The maximum D-Bus message is 128MiB so I think we
>>>are good
>>>there but I think it can be very time consuming to return all users
>>>without
>>>some sort of paging.
>>This feature is internally dependant on enumerate=true, where we already
>>store all standard POSIX attributes (struct passwd, struct group)
>>in-memory, do you think the D-Bus "enumeration" provides that much
>>overhead?
>>
>>Paging would be really complex, we'd need to store the full results
>>in-memory per-client anyway and then pass around some kind of cookie to
>>resume iteration..
>>
>>In a centralized environment, I wouldn't expect the listing commands to
>>be used that commonly. Greeters or login managers (gdm) would typically
>>use the cached users instead. Some applications (Hi, RHEV-M!) choose to
>>display all their users in some kind of table and then I would expect
>>them to implement paging themselves:
>>
>>for letter in a..z:
>> users = ListUsersByNameFilter($letter)
>>
>>>>>Do we want some other filter options as well?
>>>>In the design I wanted to keep the filtering simple. Unless we receive
>>>>some other requirements..
>>>Yes, you suggested to allow only asterisk. Implement full regular
>>>expression
>>>efficiently as Dmitri would be quite problematic since ldb doesn't
>>>support
>>>regex lookup thus we would have to do this ourselves and therefore we
>>>would
>>>loose indices, or am I wrong?
>>I guess we'd have to grab all the entries and filter them ourselves..
>>
>>(Yes, this is the reason I chose the asterisk notation in the first
>>place)
>>_______________________________________________
>>sssd-devel mailing list
>>sssd-devel(a)lists.fedorahosted.org
>>https://lists.fedorahosted.org/mailman/listinfo/sssd-devel
>
>Several points:
>
>- IMO having a full regular expression support will be an overhead.
>- "Begins with" filtering with * to indicate the remaining part is good
>enough
>- I do not think we should rely on enumeration. I think we should do a
>lookup since these operations will be rare.
Yes, but as a second step, because back end currently only supports
looking up a single entry (name=dpal) or all of them (name=*) which
triggers enumeration.
But requiring enumeration /now/ and working on the filter-based lookups
later would allow us to finish the dbus responder changes already.
In my opinion:
List methods (i.e. those that return list of objects) should return only
those objects that are already cached. If the caller wants all of them,
enumeration should be turned on.
I think we'll need to add filter-based lookups as well to the back end.
Requiring enumeration is simply a no-go in large production systems.