From: Scott Cantor Date: Mon, 24 May 2010 22:38:34 +0000 (+0000) Subject: https://issues.shibboleth.net/jira/browse/CPPOST-47 X-Git-Tag: 2.4RC1~54 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-opensaml.git;a=commitdiff_plain;h=efdb2506230cf895ed3e68b759c7869a0c9d7ab1 https://issues.shibboleth.net/jira/browse/CPPOST-47 --- 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; } }