On Wed, 07 Jan 2015 16:03:38 -0500
Dmitri Pal <d...@redhat.com> wrote:

> On 01/07/2015 03:41 PM, Simo Sorce wrote:
> > On Wed, 07 Jan 2015 15:25:30 -0500
> > Dmitri Pal <d...@redhat.com> wrote:
> >
> >> On 01/07/2015 03:05 PM, Simo Sorce wrote:
> >>> On Tue, 06 Jan 2015 09:59:08 -0500
> >>> Dmitri Pal <d...@redhat.com> 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@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
> >>> reasonable
> >>>
> >>>> - I do not think we should rely on enumeration. I think we should
> >>>> do a lookup since these operations will be rare.
> >>> Nope.
> >>> This is the same thinking the implementers of the nss interface
> >>> went through. And then users started using enumeration all the
> >>> time.
> >>>
> >>> It may be ok to let users programmatically force full enumeration
> >>> somehow. But the default should be to return only what is in
> >>> cache. If you do otherwise people will test applications using *
> >>> with 3 users on the system and then fail spectacularly when there
> >>> are actually 100K users in the directory.
> >> I think there is a problem with the approach you suggest.
> >>
> >> Say there is an application that allows you to list groups starting
> >> with a letter. It is used to define roles for application
> >> administration.
> >>
> >> Assume that there is a group "Agroup". It is a new group that does
> >> not have users yet. But it was created for use with the application
> >> so that roles can be associated with this group. The admin of the
> >> application thus wants to start using it.
> >> This group will never be looked up if "A*" query will be run
> >> against cache because it will not end up in cache. That would
> >> force admin to turn full enumeration on SSSD. This is bad.
> > What matters is the '*' does not do enumeration, if 'ABC*' causes an
> > online lookup it is fine imo.
> >
> >> IMO there should be a way for those queries to actually go online.
> >> We can, however, not process all results. We can explicitly say
> >> "first 10 or 20 results and that is it". It can be an argument of
> >> the call with the default being a value in sssd.conf.
> > It may make sense to think of a "ranged" interface for wildcard
> > lookups, where you have to explicitly provide the range you want
> > capped to a max length defined in sssd conf, and if you exceed that
> > size you get an error.
> >
> > This way users are forced to think about how many result they
> > want/can process.
> >
> > So the wildcard interface will be different from exact match
> > interface.
> >
> > Simo.
> >
> how about:
> 
> entries[] = lookup(string filter, unsigned total);
> 
> Filter can be:
> - string without asterisk (then there will be an exact match search
> online)
> - string with asterisk or just asterisk (in this case function would 
> search for "total" number of results only)
> 
> if total is 0 then a configured maximum value from sssd.conf will be 
> used. Default 30 would probably be enough.
> 
> In this case * will go online but for only 30 results max.
> It is similar to -z option in the ldapsearch.
> 
> Does that make sense?
 
How do you get the next 30 ?

Also the query may be slow no matter what you set if you make it at all
with '*'.

We can use paged serches with some servers, but not all of them support
this and some will be slow anyway.

Simo.

-- 
Simo Sorce * Red Hat, Inc * New York
_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/mailman/listinfo/sssd-devel

Reply via email to