[yast-commit] r53911 - in /trunk/ldap-server/src: LdapServer.pm agent/SlapdConfigAgent.cc lib/slapd-config.cpp lib/slapd-config.h
Author: rhafer Date: Fri Dec 5 11:39:09 2008 New Revision: 53911 URL: http://svn.opensuse.org/viewcvs/yast?rev=53911&view=rev Log: In Write(), when a restart of slapd is required wait until slapd finishes any running indexing task (bnc#450457) Modified: trunk/ldap-server/src/LdapServer.pm trunk/ldap-server/src/agent/SlapdConfigAgent.cc trunk/ldap-server/src/lib/slapd-config.cpp trunk/ldap-server/src/lib/slapd-config.h Modified: trunk/ldap-server/src/LdapServer.pm URL: http://svn.opensuse.org/viewcvs/yast/trunk/ldap-server/src/LdapServer.pm?rev=53911&r1=53910&r2=53911&view=diff ============================================================================== --- trunk/ldap-server/src/LdapServer.pm (original) +++ trunk/ldap-server/src/LdapServer.pm Fri Dec 5 11:39:09 2008 @@ -706,9 +706,11 @@ _("Applying changes to /etc/openldap/ldap.conf"), _("Creating Base Objects for newly created databases"), _("Updating Default Password Policy Objects"), + _("Waiting for OpenLDAP background indexing tasks to complete (this might take some minutes)"), + _("Restarting OpenLDAP Server if required"), ]; - Progress->New("Writing OpenLDAP Configuration", "", 5, $progressItems, $progressItems, ""); + Progress->New("Writing OpenLDAP Configuration", "", 7, $progressItems, $progressItems, ""); Progress->NextStage(); # these changes require a restart of slapd @@ -819,11 +821,23 @@ return 0; } - Progress->Finish(); if ( $restartRequired ) { + # An indexing Task might be running, wait for it to complete + # before restarting the server (bnc#450457) + Progress->NextStage(); + y2milestone("slapd might be running a background task, waiting for completion"); + SCR->Execute('.ldapserver.waitForBackgroundTasks') ; + y2milestone("background tasks completed"); + Progress->NextStage(); Service->Restart("ldap"); } + else + { + Progress->NextStage(); + Progress->NextStage(); + } + Progress->Finish(); } sleep(1); $configured = $ret; Modified: trunk/ldap-server/src/agent/SlapdConfigAgent.cc URL: http://svn.opensuse.org/viewcvs/yast/trunk/ldap-server/src/agent/SlapdConfigAgent.cc?rev=53911&r1=53910&r2=53911&view=diff ============================================================================== --- trunk/ldap-server/src/agent/SlapdConfigAgent.cc (original) +++ trunk/ldap-server/src/agent/SlapdConfigAgent.cc Fri Dec 5 11:39:09 2008 @@ -357,6 +357,11 @@ return YCPBoolean(false); } } + else if ( path->component_str(0) == "waitForBackgroundTasks" ) + { + olc.waitForBackgroundTasks(); + return YCPBoolean(true); + } else if ( path->component_str(0) == "addRootSaslRegexp" ) { std::string filename = "/etc/openldap/slapd.d/cn=config.ldif"; Modified: trunk/ldap-server/src/lib/slapd-config.cpp URL: http://svn.opensuse.org/viewcvs/yast/trunk/ldap-server/src/lib/slapd-config.cpp?rev=53911&r1=53910&r2=53911&view=diff ============================================================================== --- trunk/ldap-server/src/lib/slapd-config.cpp (original) +++ trunk/ldap-server/src/lib/slapd-config.cpp Fri Dec 5 11:39:09 2008 @@ -1543,6 +1543,28 @@ } } +/* + * This function triggers a simple Modify Operation ( basically a NO-OP) to + * the config backend, if slapd is currently running an indexing task this + * Operation will block until that task is finished as back-config can only + * complete that operation when it's the only active thread. + */ +void OlcConfig::waitForBackgroundTasks() +{ + try { + LDAPModification mod( LDAPAttribute("objectClass", "olcConfig"), LDAPModification::OP_ADD ); + LDAPModList ml; + ml.addModification(mod); + m_lc->modify( "cn=config", &ml ); + } catch (LDAPException e) { + if (e.getResultCode() != LDAPResult::ATTRIBUTE_OR_VALUE_EXISTS ) + { + log_it(SLAPD_LOG_INFO, e.getResultMsg() + " " + e.getServerMsg() ); + throw; + } + } +} + OlcDatabaseList OlcConfig::getDatabases() { OlcDatabaseList res; Modified: trunk/ldap-server/src/lib/slapd-config.h URL: http://svn.opensuse.org/viewcvs/yast/trunk/ldap-server/src/lib/slapd-config.h?rev=53911&r1=53910&r2=53911&view=diff ============================================================================== --- trunk/ldap-server/src/lib/slapd-config.h (original) +++ trunk/ldap-server/src/lib/slapd-config.h Fri Dec 5 11:39:09 2008 @@ -339,6 +339,8 @@ void setGlobals( OlcGlobalConfig &olcg); void updateEntry( OlcConfigEntry &oce ); + void waitForBackgroundTasks(); + static SlapdConfigLogCallback *logCallback; static void setLogCallback( SlapdConfigLogCallback *lcb ); -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org
participants (1)
-
rhafer@svn.opensuse.org