From ab4febc1d9b435165cfcf4c9bd195e2889d5e5bc Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Tue, 25 Sep 2018 11:40:08 -0700 Subject: [PATCH 1/3] [SHIBUI-899] Added @Override for refresh method, commenting out code related to the negative refresh delay problem (and logging we can live without for now). --- ...penSamlFileBackedHTTPMetadataResolver.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java index f1e551b8e..3a124671d 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java @@ -8,6 +8,8 @@ import org.apache.http.impl.client.HttpClients; import org.apache.lucene.index.IndexWriter; import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.joda.time.chrono.ISOChronology; import org.opensaml.saml.metadata.resolver.filter.FilterException; import org.opensaml.saml.metadata.resolver.filter.MetadataFilterChain; import org.opensaml.saml.metadata.resolver.impl.FileBackedHTTPMetadataResolver; @@ -92,4 +94,67 @@ public void refilter() { logger.error("An error occurred while attempting to filter metadata!", e); } } + + //TODO: This is a band-aid for the negative refresh issue. This override should go away once we figure out + // why the negative refresh is occurring. + @Override + public synchronized void refresh() throws ResolverException { + DateTime now = null; + String mdId = null; + // boolean trackRefreshSuccess = false; + + try { + // In case a destroy() thread beat this thread into the monitor. + if (isDestroyed()) { + return; + } + + // A manual refresh() must cancel the previously-scheduled future task, since will (re)schedule its own. + // If this execution *is* the task, it's ok to cancel ourself, we're already running. + /*if (refreshMetadataTask != null) { + refreshMetadataTask.cancel(); + }*/ + + now = new DateTime(ISOChronology.getInstanceUTC()); + mdId = getMetadataIdentifier(); + + // log.debug("{} Beginning refresh of metadata from '{}'", getLogPrefix(), mdId); + + final byte[] mdBytes = fetchMetadata(); + if (mdBytes == null) { + // log.info("{} Metadata from '{}' has not changed since last refresh", getLogPrefix(), mdId); + processCachedMetadata(mdId, now); + } else { + // log.debug("{} Processing new metadata from '{}'", getLogPrefix(), mdId); + processNewMetadata(mdId, now, mdBytes); + } + } catch (final Throwable t) { + // trackRefreshSuccess = false; + // log.error("{} Error occurred while attempting to refresh metadata from '{}'", getLogPrefix(), mdId, t); + // nextRefresh = new DateTime(ISOChronology.getInstanceUTC()).plus(minRefreshDelay); + if (t instanceof Exception) { + throw new ResolverException((Exception) t); + } else { + throw new ResolverException(String.format("Saw an error of type '%s' with message '%s'", + t.getClass().getName(), t.getMessage())); + } + } /*finally { + // logCachedMetadataExpiration(now); + + if (trackRefreshSuccess) { + wasLastRefreshSuccess = true; + lastSuccessfulRefresh = now; + } else { + wasLastRefreshSuccess = false; + } + + refreshMetadataTask = new RefreshMetadataTask(); + final long nextRefreshDelay = nextRefresh.getMillis() - System.currentTimeMillis(); + // taskTimer.schedule(refreshMetadataTask, nextRefreshDelay); + log.info("{} Next refresh cycle for metadata provider '{}' will occur on '{}' ('{}' local time)", + new Object[] {getLogPrefix(), mdId, nextRefresh, + nextRefresh.toDateTime(DateTimeZone.getDefault()),}); + lastRefresh = now; + }*/ + } } From 7fb13a919cb0fb7d2ba223d4c24d93bdbae1c034 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Tue, 25 Sep 2018 13:32:25 -0700 Subject: [PATCH 2/3] [SHIBUI-899] Removed commented code. --- ...penSamlFileBackedHTTPMetadataResolver.java | 33 +------------------ 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java index 3a124671d..d6204aee3 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java @@ -101,7 +101,6 @@ public void refilter() { public synchronized void refresh() throws ResolverException { DateTime now = null; String mdId = null; - // boolean trackRefreshSuccess = false; try { // In case a destroy() thread beat this thread into the monitor. @@ -109,52 +108,22 @@ public synchronized void refresh() throws ResolverException { return; } - // A manual refresh() must cancel the previously-scheduled future task, since will (re)schedule its own. - // If this execution *is* the task, it's ok to cancel ourself, we're already running. - /*if (refreshMetadataTask != null) { - refreshMetadataTask.cancel(); - }*/ - now = new DateTime(ISOChronology.getInstanceUTC()); mdId = getMetadataIdentifier(); - // log.debug("{} Beginning refresh of metadata from '{}'", getLogPrefix(), mdId); - final byte[] mdBytes = fetchMetadata(); if (mdBytes == null) { - // log.info("{} Metadata from '{}' has not changed since last refresh", getLogPrefix(), mdId); processCachedMetadata(mdId, now); } else { - // log.debug("{} Processing new metadata from '{}'", getLogPrefix(), mdId); processNewMetadata(mdId, now, mdBytes); } } catch (final Throwable t) { - // trackRefreshSuccess = false; - // log.error("{} Error occurred while attempting to refresh metadata from '{}'", getLogPrefix(), mdId, t); - // nextRefresh = new DateTime(ISOChronology.getInstanceUTC()).plus(minRefreshDelay); if (t instanceof Exception) { throw new ResolverException((Exception) t); } else { throw new ResolverException(String.format("Saw an error of type '%s' with message '%s'", t.getClass().getName(), t.getMessage())); } - } /*finally { - // logCachedMetadataExpiration(now); - - if (trackRefreshSuccess) { - wasLastRefreshSuccess = true; - lastSuccessfulRefresh = now; - } else { - wasLastRefreshSuccess = false; - } - - refreshMetadataTask = new RefreshMetadataTask(); - final long nextRefreshDelay = nextRefresh.getMillis() - System.currentTimeMillis(); - // taskTimer.schedule(refreshMetadataTask, nextRefreshDelay); - log.info("{} Next refresh cycle for metadata provider '{}' will occur on '{}' ('{}' local time)", - new Object[] {getLogPrefix(), mdId, nextRefresh, - nextRefresh.toDateTime(DateTimeZone.getDefault()),}); - lastRefresh = now; - }*/ + } } } From 60869cf716f441844b7da237833269126c5c1e7d Mon Sep 17 00:00:00 2001 From: Jj! Date: Tue, 25 Sep 2018 16:46:38 -0500 Subject: [PATCH 3/3] [SHIBUI-899] move some code about --- .../OpenSamlFileBackedHTTPMetadataResolver.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java index d6204aee3..d7d124a0a 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java @@ -8,7 +8,6 @@ import org.apache.http.impl.client.HttpClients; import org.apache.lucene.index.IndexWriter; import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; import org.joda.time.chrono.ISOChronology; import org.opensaml.saml.metadata.resolver.filter.FilterException; import org.opensaml.saml.metadata.resolver.filter.MetadataFilterChain; @@ -99,17 +98,15 @@ public void refilter() { // why the negative refresh is occurring. @Override public synchronized void refresh() throws ResolverException { - DateTime now = null; - String mdId = null; + // In case a destroy() thread beat this thread into the monitor. + if (isDestroyed()) { + return; + } try { - // In case a destroy() thread beat this thread into the monitor. - if (isDestroyed()) { - return; - } - now = new DateTime(ISOChronology.getInstanceUTC()); - mdId = getMetadataIdentifier(); + DateTime now = new DateTime(ISOChronology.getInstanceUTC()); + String mdId = getMetadataIdentifier(); final byte[] mdBytes = fetchMetadata(); if (mdBytes == null) {