On Thu, Dec 16, 2010 at 02:30:10PM -0500, Stephen Gallagher wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 12/13/2010 08:15 AM, Sumit Bose wrote: > >> We discussed this issue on irc and agreed that there will be no direct > >> fix to close this window, but a paragraph in the man page explaining > >> that there might be a small chance that during the first > >> enum_cache_timeout seconds a enumeration request like 'getent passwd' > >> will return no results. > > > I opted to add a paragraph to the enumerate option instead, specifying > that during the first enumeration, requests for all users or groups may > return no results. > > New patch attached. Thanks for the review.
ACK to both bye, Sumit > > - -- > Stephen Gallagher > RHCE 804006346421761 > > Delivering value year after year. > Red Hat ranks #1 in value among software vendors. > http://www.redhat.com/promo/vendor/ > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.11 (GNU/Linux) > Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/ > > iEYEARECAAYFAk0KaMIACgkQeiVVYja6o6PMVgCgpQJbgIDiEokygq2GMsp4svcL > PKIAn07AV5yLt/7s4KR09ZZy0eOk7/vz > =YuTP > -----END PGP SIGNATURE----- > From 3153b6097ceef650294f54f368c82e1d6186760c Mon Sep 17 00:00:00 2001 > From: Stephen Gallagher <sgall...@redhat.com> > Date: Wed, 8 Dec 2010 15:47:29 -0500 > Subject: [PATCH] Start first enumeration immediately > > Previously, we would wait for ten seconds before starting an > enumeration. However, this meant that on the first startup (before > we had run our first enumeration) there was a ten-second window > where clients would immediately get back a response with no > entries instead of blocking until the enumeration completed. > > With this patch, SSSD will now run an enumeration immediately upon > startup. Further startups will retain the ten-second delay so as > not to slow down system bootups. > > https://fedorahosted.org/sssd/ticket/616 > --- > src/man/sssd.conf.5.xml | 5 +++++ > src/providers/ldap/ldap_common.c | 31 ++++++++++++++++++++++++++++--- > src/providers/ldap/ldap_id_enum.c | 14 ++++++++++++++ > 3 files changed, 47 insertions(+), 3 deletions(-) > > diff --git a/src/man/sssd.conf.5.xml b/src/man/sssd.conf.5.xml > index > 2bba38050fe2653ea7b471d1522491340c4069ef..7392dd0931ab015a58520eea93f34d798758b441 > 100644 > --- a/src/man/sssd.conf.5.xml > +++ b/src/man/sssd.conf.5.xml > @@ -513,6 +513,11 @@ > processing. > </para> > <para> > + While the first enumeration is running, requests > + for the complete user or group lists may return > + no results until it completes. > + </para> > + <para> > Further, enabling enumeration may increase the > time > necessary to detect network disconnection, as > longer timeouts are required to ensure that > diff --git a/src/providers/ldap/ldap_common.c > b/src/providers/ldap/ldap_common.c > index > 9945b4b137f9b2659235e213ebe20c3509203e63..a38d5cc2081677962c07c6b621519b5c82d1a78d > 100644 > --- a/src/providers/ldap/ldap_common.c > +++ b/src/providers/ldap/ldap_common.c > @@ -415,12 +415,37 @@ int sdap_id_setup_tasks(struct sdap_id_ctx *ctx) > struct timeval tv; > int ret = EOK; > int delay; > + bool has_enumerated; > > /* set up enumeration task */ > if (ctx->be->domain->enumerate) { > - /* run the first one in a couple of seconds so that we have time to > - * finish initializations first*/ > - tv = tevent_timeval_current_ofs(10, 0); > + /* If this is the first startup, we need to kick off > + * an enumeration immediately, to close a window where > + * clients requesting get*ent information won't get an > + * immediate reply with no entries > + */ > + ret = sysdb_has_enumerated(ctx->be->sysdb, > + ctx->be->domain, > + &has_enumerated); > + if (ret != EOK) { > + return ret; > + } > + if (has_enumerated) { > + /* At least one enumeration has previously run, > + * so clients will get cached data. We will delay > + * starting to enumerate by 10s so we don't slow > + * down the startup process if this is happening > + * during system boot. > + */ > + tv = tevent_timeval_current_ofs(10, 0); > + } else { > + /* This is our first startup. Schedule the > + * enumeration to start immediately once we > + * enter the mainloop. > + */ > + tv = tevent_timeval_current(); > + } > + > ret = ldap_id_enumerate_set_timer(ctx, tv); > } else { > /* the enumeration task, runs the cleanup process by itself, > diff --git a/src/providers/ldap/ldap_id_enum.c > b/src/providers/ldap/ldap_id_enum.c > index > f2ac8c6a93b821eb89e8c22f8170bebad8d68950..8695f35502e916f0a9201de2b267db05276d1c64 > 100644 > --- a/src/providers/ldap/ldap_id_enum.c > +++ b/src/providers/ldap/ldap_id_enum.c > @@ -134,12 +134,26 @@ static void ldap_id_enumerate_reschedule(struct > tevent_req *req) > uint64_t err; > struct timeval tv; > int delay; > + errno_t ret; > > if (tevent_req_is_error(req, &tstate, &err)) { > /* On error schedule starting from now, not the last run */ > tv = tevent_timeval_current(); > } else { > tv = ctx->last_enum; > + > + /* Ok, we've completed an enumeration. Save this to the > + * sysdb so we can postpone starting up the enumeration > + * process on the next SSSD service restart (to avoid > + * slowing down system boot-up > + */ > + ret = sysdb_set_enumerated(ctx->be->sysdb, > + ctx->be->domain, > + true); > + if (ret != EOK) { > + DEBUG(1, ("Could not mark domain as having enumerated.\n")); > + /* This error is non-fatal, so continue */ > + } > } > talloc_zfree(req); > > -- > 1.7.3.3 > > _______________________________________________ > sssd-devel mailing list > sssd-devel@lists.fedorahosted.org > https://fedorahosted.org/mailman/listinfo/sssd-devel _______________________________________________ sssd-devel mailing list sssd-devel@lists.fedorahosted.org https://fedorahosted.org/mailman/listinfo/sssd-devel