Use common replication wait timeout of 5min

Instead of multiple timeout values all over the code base, all
replication waits now use a common timeout value from api.env of 5
minutes. Waiting for HTTP/replica principal takes 90 to 120 seconds, so
5 minutes seem like a sufficient value for slow setups.

Fixes: https://pagure.io/freeipa/issue/7595
Signed-off-by: Christian Heimes <cheimes@redhat.com>
Reviewed-By: Fraser Tweedale <ftweedal@redhat.com>
This commit is contained in:
Christian Heimes
2018-06-22 13:01:55 +02:00
parent 14c869b347
commit 1b966f708a
5 changed files with 22 additions and 9 deletions
+2
View File
@@ -149,6 +149,8 @@ DEFAULT_CONFIG = (
('startup_timeout', 300), ('startup_timeout', 300),
# How long http connection should wait for reply [seconds]. # How long http connection should wait for reply [seconds].
('http_timeout', 30), ('http_timeout', 30),
# How long to wait for an entry to appear on a replica
('replication_wait_timeout', 300),
# Web Application mount points # Web Application mount points
('mount_ipa', '/ipa/'), ('mount_ipa', '/ipa/'),
+3 -1
View File
@@ -5,6 +5,7 @@ from __future__ import print_function, absolute_import
import enum import enum
import logging import logging
from ipalib import api
from ipaserver.secrets.kem import IPAKEMKeys, KEMLdap from ipaserver.secrets.kem import IPAKEMKeys, KEMLdap
from ipaserver.secrets.client import CustodiaClient from ipaserver.secrets.client import CustodiaClient
from ipaplatform.paths import paths from ipaplatform.paths import paths
@@ -212,7 +213,8 @@ class CustodiaInstance(SimpleServiceInstance):
cli = self._get_custodia_client() cli = self._get_custodia_client()
cli.fetch_key('dm/DMHash') cli.fetch_key('dm/DMHash')
def _wait_keys(self, timeout=300): def _wait_keys(self):
timeout = api.env.replication_wait_timeout
deadline = int(time.time()) + timeout deadline = int(time.time()) + timeout
logger.info("Waiting up to %s seconds to see our keys " logger.info("Waiting up to %s seconds to see our keys "
"appear on host %s", timeout, self.ldap_uri) "appear on host %s", timeout, self.ldap_uri)
+5 -1
View File
@@ -607,7 +607,11 @@ class HTTPInstance(service.Service):
else: else:
remote_ldap.simple_bind(ipaldap.DIRMAN_DN, remote_ldap.simple_bind(ipaldap.DIRMAN_DN,
self.dm_password) self.dm_password)
replication.wait_for_entry(remote_ldap, service_dn, timeout=60) replication.wait_for_entry(
remote_ldap,
service_dn,
timeout=api.env.replication_wait_timeout
)
def migrate_to_mod_ssl(self): def migrate_to_mod_ssl(self):
"""For upgrades only, migrate from mod_nss to mod_ssl""" """For upgrades only, migrate from mod_nss to mod_ssl"""
+8 -5
View File
@@ -408,13 +408,16 @@ class KrbInstance(service.Service):
def _wait_for_replica_kdc_entry(self): def _wait_for_replica_kdc_entry(self):
master_dn = self.api.Object.server.get_dn(self.fqdn) master_dn = self.api.Object.server.get_dn(self.fqdn)
kdc_dn = DN(('cn', 'KDC'), master_dn) kdc_dn = DN(('cn', 'KDC'), master_dn)
ldap_uri = ipaldap.get_ldap_uri(self.master_fqdn)
ldap_uri = 'ldap://{}'.format(self.master_fqdn)
with ipaldap.LDAPClient( with ipaldap.LDAPClient(
ldap_uri, cacert=paths.IPA_CA_CRT) as remote_ldap: ldap_uri, cacert=paths.IPA_CA_CRT, start_tls=True
) as remote_ldap:
remote_ldap.gssapi_bind() remote_ldap.gssapi_bind()
replication.wait_for_entry(remote_ldap, kdc_dn, timeout=60) replication.wait_for_entry(
remote_ldap,
kdc_dn,
timeout=api.env.replication_wait_timeout
)
def _call_certmonger(self, certmonger_ca='IPA'): def _call_certmonger(self, certmonger_ca='IPA'):
subject = str(DN(('cn', self.fqdn), self.subject_base)) subject = str(DN(('cn', self.fqdn), self.subject_base))
+4 -2
View File
@@ -161,7 +161,7 @@ def wait_for_task(conn, dn):
return exit_code return exit_code
def wait_for_entry(connection, dn, timeout=7200, attr=None, attrvalue='*', def wait_for_entry(connection, dn, timeout, attr=None, attrvalue='*',
quiet=True): quiet=True):
"""Wait for entry and/or attr to show up """Wait for entry and/or attr to show up
""" """
@@ -751,7 +751,9 @@ class ReplicationManager(object):
# that we will have to set the memberof fixup task # that we will have to set the memberof fixup task
self.need_memberof_fixup = True self.need_memberof_fixup = True
wait_for_entry(a_conn, entry.dn) wait_for_entry(
a_conn, entry.dn, timeout=api.env.replication_wait_timeout
)
def needs_memberof_fixup(self): def needs_memberof_fixup(self):
return self.need_memberof_fixup return self.need_memberof_fixup