Hello,
Fix error handling for initial zone refresh in persistent search.
Old code terminates watcher thread in case of error. Now initial lookup
is restarted after reconnect_interval seconds.
--
Petr^2 Spacek
From 99a820736eab9ad597b193fe504ca965263b6655 Mon Sep 17 00:00:00 2001
From: Petr Spacek <[email protected]>
Date: Thu, 22 Nov 2012 14:52:08 +0100
Subject: [PATCH] Fix error handling for initial zone refresh in persistent
search.
Old code terminates watcher thread in case of error. Now initial lookup
is restarted after reconnect_interval seconds.
Signed-off-by: Petr Spacek <[email protected]>
---
src/ldap_helper.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/src/ldap_helper.c b/src/ldap_helper.c
index 57235de7da158b7a05de9e35fff2cdaaff74276c..28b2eb45c116572d76fefcfb9f5c1fba5411dc12 100644
--- a/src/ldap_helper.c
+++ b/src/ldap_helper.c
@@ -3757,6 +3757,7 @@ ldap_psearch_watcher(isc_threadarg_t arg)
restart:
/* Perform initial lookup */
+ ldap_query_free(ISC_TRUE, &ldap_qresult);
flush_required = ISC_TRUE;
if (inst->psearch) {
log_debug(1, "Sending initial psearch lookup");
@@ -3794,15 +3795,30 @@ restart:
if (!sane_sleep(inst, inst->reconnect_interval))
goto cleanup;
}
- ldap_query_free(ISC_TRUE, &ldap_qresult);
goto restart;
} else if (flush_required == ISC_TRUE) {
+ isc_boolean_t restart_needed = ISC_FALSE;
/* First LDAP result after (re)start was received successfully:
* Unload old zones and flush record cache.
* We want to save cache in case of search timeout during restart.
*/
- CHECK(refresh_zones_from_ldap(inst, ISC_TRUE));
- CHECK(flush_ldap_cache(inst->cache));
+ if ((result = refresh_zones_from_ldap(inst, ISC_TRUE))
+ != ISC_R_SUCCESS) {
+ log_error_r("zone refresh after initial psearch lookup failed");
+ restart_needed = ISC_TRUE;
+ } else if ((result = flush_ldap_cache(inst->cache))
+ != ISC_R_SUCCESS) {
+ log_error_r("cache flush after initial psearch lookup failed");
+ restart_needed = ISC_TRUE;
+ }
+
+ if (restart_needed) {
+ if (!sane_sleep(inst, inst->reconnect_interval))
+ goto cleanup;
+
+ goto restart;
+ }
+
flush_required = ISC_FALSE;
}
--
1.7.11.7
_______________________________________________
Freeipa-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/freeipa-devel