[java-opensaml] branch master updated: IDP-1604 Better status values from ChainingMetadataResolver

Rod Widdowson rdw at steadingsoftware.com
Sun May 24 10:51:50 UTC 2020


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch master
in repository java-opensaml.

View the commit online:
http://git.shibboleth.net/view/?p=java-opensaml.git;a=commit;h=338df578ece0ae320b4ffb07b66b649f1883b612

The following commit(s) were added to refs/heads/master by this push:
       new  338df578e IDP-1604 Better status values from ChainingMetadataResolver
338df578e is described below

commit 338df578ece0ae320b4ffb07b66b649f1883b612
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sun May 24 11:47:30 2020 +0100

    IDP-1604 Better status values from ChainingMetadataResolver
    
    https://issues.shibboleth.net/jira/browse/IDP-1604
    
    Modify last checking to return a more coherent story about
    the state of the child resolvers.
    
    A failure of any child is reflected in the response on all
    Instant responses (update, refresh, successfulRefresh).
    
    This mirrors the other responses (wasLastRefreshSuccess,
    lastFailureCause) where the "worst case" is returned.
---
 .../resolver/ChainingMetadataResolver.java         | 37 +++++++++++++++-------
 1 file changed, 26 insertions(+), 11 deletions(-)

diff --git a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
index 833861712..89e970449 100644
--- a/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
+++ b/opensaml-saml-api/src/main/java/org/opensaml/saml/metadata/resolver/ChainingMetadataResolver.java
@@ -173,30 +173,38 @@ public class ChainingMetadataResolver extends AbstractIdentifiableInitializableC
         }
     }
 
-    /** {@inheritDoc} */
+    /** {@inheritDoc}
+     * We iterate over all the children and return the earliest instant or null if one of them hasn't ever updated. */
     @Override
     @Nullable public Instant getLastUpdate() {
         Instant ret = null;
         for (final MetadataResolver resolver : resolvers) {
             if (resolver instanceof RefreshableMetadataResolver) {
                 final Instant lastUpdate = ((RefreshableMetadataResolver) resolver).getLastUpdate();
-                if (ret == null || lastUpdate == null || ret.isBefore(lastUpdate)) {
+                if (lastUpdate == null) {
+                    return null;
+                }
+                if (ret == null || ret.isBefore(lastUpdate)) {
                     ret = lastUpdate;
                 }
             }
         }
-        
+
         return ret;
     }
 
-    /** {@inheritDoc} */
+    /** {@inheritDoc}
+    * We iterate over all the children and return the earliest instant or null if one of them hasn't ever refreshed. */
     @Override
     @Nullable public Instant getLastRefresh() {
         Instant ret = null;
         for (final MetadataResolver resolver : resolvers) {
             if (resolver instanceof RefreshableMetadataResolver) {
                 final Instant lastRefresh = ((RefreshableMetadataResolver) resolver).getLastRefresh();
-                if (ret == null || lastRefresh == null || ret.isBefore(lastRefresh)) {
+                if (lastRefresh == null) {
+                    return null;
+                }
+                if (ret == null || ret.isBefore(lastRefresh)) {
                     ret = lastRefresh;
                 }
             }
@@ -205,22 +213,28 @@ public class ChainingMetadataResolver extends AbstractIdentifiableInitializableC
         return ret;
     }
     
-    /** {@inheritDoc} */
+    /** {@inheritDoc}
+    * We iterate over all the children and return the earliest instant or null if one of them
+    * hasn't ever refreshed successfully. */
     public Instant getLastSuccessfulRefresh() {
         Instant ret = null;
         for (final MetadataResolver resolver : resolvers) {
             if (resolver instanceof RefreshableMetadataResolver) {
                 final Instant lastSuccessRefresh = ((RefreshableMetadataResolver) resolver).getLastSuccessfulRefresh();
-                if (ret == null || lastSuccessRefresh == null || ret.isBefore(lastSuccessRefresh)) {
+                if (lastSuccessRefresh == null) {
+                    return null;
+                }
+                if (ret == null || ret.isBefore(lastSuccessRefresh)) {
                     ret = lastSuccessRefresh;
                 }
             }
         }
-        
+
         return ret;
     }
 
-    /** {@inheritDoc} */
+    /** {@inheritDoc}
+     * We iterate over all children - a failure of any is a failure. */
     public Boolean wasLastRefreshSuccess() {
         for (final MetadataResolver resolver : resolvers) {
             if (resolver instanceof RefreshableMetadataResolver) {
@@ -230,11 +244,12 @@ public class ChainingMetadataResolver extends AbstractIdentifiableInitializableC
                 }
             }
         }
-        
+
         return true;
     }
     
-    /** {@inheritDoc} */
+    /** {@inheritDoc}
+     * We iterate over all children and return the first failure we find. */
     public Throwable getLastFailureCause() {
         for (final MetadataResolver resolver : resolvers) {
             if (resolver instanceof RefreshableMetadataResolver) {

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list