From efdb2506230cf895ed3e68b759c7869a0c9d7ab1 Mon Sep 17 00:00:00 2001 From: Scott Cantor Date: Mon, 24 May 2010 22:38:34 +0000 Subject: [PATCH] https://issues.shibboleth.net/jira/browse/CPPOST-47 --- .gitignore | 1 + saml/saml2/metadata/impl/XMLMetadataProvider.cpp | 21 ++++++++++++--------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index c16dc3b..b9cc7e1 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,4 @@ /*.gz /*.sdf /*.opensdf +/ipch diff --git a/saml/saml2/metadata/impl/XMLMetadataProvider.cpp b/saml/saml2/metadata/impl/XMLMetadataProvider.cpp index bf359c9..b6fa61b 100644 --- a/saml/saml2/metadata/impl/XMLMetadataProvider.cpp +++ b/saml/saml2/metadata/impl/XMLMetadataProvider.cpp @@ -186,6 +186,7 @@ pair XMLMetadataProvider::load(bool backup) remove(m_backing.c_str()); if (rename(backupKey.c_str(), m_backing.c_str()) != 0) m_log.crit("unable to rename metadata backup file"); + preserveCacheTag(); } xmlObject->releaseThisAndChildrenDOM(); @@ -207,7 +208,7 @@ pair XMLMetadataProvider::load(bool backup) // validUntil is the tightest interval amongst the children. // If a remote resource, adjust the reload interval. - if (!backup) { + if (!backup && !m_local) { m_backoffFactor = 1; m_reloadInterval = computeNextRefresh(); m_log.info("adjusted reload interval to %d seconds", m_reloadInterval); @@ -226,26 +227,28 @@ pair XMLMetadataProvider::background_load() if (ex == HTTPResponse::XMLTOOLING_HTTP_STATUS_NOTMODIFIED) { // Unchanged document, so re-establish previous refresh interval. m_reloadInterval = computeNextRefresh(); - m_log.info("adjusted reload interval to %d seconds", m_reloadInterval); + m_log.info("remote resource (%s) unchanged, adjusted reload interval to %u seconds", m_source.c_str(), m_reloadInterval); } else { // Any other status code, just treat as an error. m_reloadInterval = m_minRefreshDelay * m_backoffFactor++; if (m_reloadInterval > m_maxRefreshDelay) m_reloadInterval = m_maxRefreshDelay; - m_log.warn("adjusted reload interval to %d seconds", m_reloadInterval); + m_log.warn("adjusted reload interval to %u seconds", m_reloadInterval); } if (!m_loaded && !m_backing.empty()) return load(true); throw; } catch (exception&) { - m_reloadInterval = m_minRefreshDelay * m_backoffFactor++; - if (m_reloadInterval > m_maxRefreshDelay) - m_reloadInterval = m_maxRefreshDelay; - m_log.warn("adjusted reload interval to %d seconds", m_reloadInterval); - if (!m_loaded && !m_backing.empty()) - return load(true); + if (!m_local) { + m_reloadInterval = m_minRefreshDelay * m_backoffFactor++; + if (m_reloadInterval > m_maxRefreshDelay) + m_reloadInterval = m_maxRefreshDelay; + m_log.warn("adjusted reload interval to %u seconds", m_reloadInterval); + if (!m_loaded && !m_backing.empty()) + return load(true); + } throw; } } -- 2.1.4