[java-identity-provider] branch maint-3.4 updated: IDP-1496 Fix AttributeResovlerGuageSet in the face of initialization issues
Rod Widdowson
rdw at steadingsoftware.com
Wed Sep 11 06:40:24 EDT 2019
This is an automated email from the git hooks/post-receive script.
rdw pushed a commit to branch maint-3.4
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=2efe7837851fb1963b4716b050181c9c6d8bde69
The following commit(s) were added to refs/heads/maint-3.4 by this push:
new 2efe783 IDP-1496 Fix AttributeResovlerGuageSet in the face of initialization issues
2efe783 is described below
commit 2efe7837851fb1963b4716b050181c9c6d8bde69
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Tue Jun 18 13:40:50 2019 +0100
IDP-1496 Fix AttributeResovlerGuageSet in the face of initialization issues
https://issues.shibboleth.net/jira/browse/IDP-1496
Defer looking at the resolver from the service until such time as it returns,
rather than doing it inline which render non-failfast services failfast.
This fix does not bring forward the V4 change for the metadata provider.
---
.../impl/AttributeResolverServiceGaugeSet.java | 58 +++++++++++++++-------
1 file changed, 39 insertions(+), 19 deletions(-)
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java
index e708a62..06cef51 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java
@@ -16,6 +16,15 @@
*/
package net.shibboleth.idp.attribute.resolver.impl;
+import java.util.Collection;
+import java.util.Map;
+
+import javax.annotation.Nonnull;
+
+import org.joda.time.DateTime;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.codahale.metrics.Gauge;
import com.codahale.metrics.MetricFilter;
import com.codahale.metrics.MetricRegistry;
@@ -32,18 +41,17 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.service.ServiceableComponent;
-import java.util.Collection;
-import java.util.Map;
-
-import javax.annotation.Nonnull;
-
-import org.joda.time.DateTime;
-
/**
* Additional gauges for attribute resolver.
*/
+ at SuppressWarnings("deprecation")
public class AttributeResolverServiceGaugeSet extends ReloadableServiceGaugeSet implements MetricSet, MetricFilter {
+ /** Class logger. */
+ @Nonnull private final Logger log = LoggerFactory.getLogger(AttributeResolverServiceGaugeSet.class);
+
+ /** LogPrefix. */
+ private final String logPrefix;
/**
* Constructor.
*
@@ -52,6 +60,7 @@ public class AttributeResolverServiceGaugeSet extends ReloadableServiceGaugeSet
public AttributeResolverServiceGaugeSet(
@Nonnull @NotEmpty @ParameterName(name="metricName") final String metricName) {
super(metricName);
+ logPrefix = metricName;
// Checkstyle: AnonInnerLength OFF
getMetricMap().put(
@@ -63,16 +72,25 @@ public class AttributeResolverServiceGaugeSet extends ReloadableServiceGaugeSet
getService().getServiceableComponent();
if (component != null) {
try {
- final AttributeResolver resolver = component.getComponent();
- final Collection<DataConnector> connectors = resolver.getDataConnectors().values();
-
- for (final DataConnector connector: connectors) {
- if (connector instanceof DataConnectorEx) {
- final long lastFail = ((DataConnectorEx) connector).getLastFail();
- if (lastFail > 0) {
- mapBuilder.put(connector.getId(), new DateTime(lastFail));
+ final Object resolver = component.getComponent();
+ if (resolver instanceof AttributeResolverImpl) {
+ final Collection<DataConnector> connectors =
+ ((AttributeResolverImpl) resolver).getDataConnectors().values();
+ for (final DataConnector connector: connectors) {
+ if (connector instanceof DataConnectorEx) {
+ final DataConnectorEx connectorEx = (DataConnectorEx)connector;
+ if (connectorEx.getLastFail() != 0) {
+ mapBuilder.put(connectorEx.getId(), connectorEx.getLastFail());
+ }
}
}
+ } else if (resolver instanceof AttributeResolver) {
+ log.debug("{} : Cannot get Data Connector failure " +
+ " information from unsupported class type {}",
+ logPrefix, resolver.getClass());
+ } else {
+ log.warn("{} : Injected Service was not for an AttributeResolver ({})",
+ logPrefix, resolver.getClass());
}
} finally {
component.unpinComponent();
@@ -93,15 +111,17 @@ public class AttributeResolverServiceGaugeSet extends ReloadableServiceGaugeSet
final ServiceableComponent component = getService().getServiceableComponent();
if (component != null) {
try {
- if (component instanceof AttributeResolver) {
+ if (component.getComponent() instanceof AttributeResolver) {
return;
+ } else {
+ log.error("{} : Injected service was not for an AttributeResolver ({})",
+ logPrefix, component.getClass());
+ throw new ComponentInitializationException("Injected service was not for an AttributeResolver");
}
} finally {
component.unpinComponent();
}
}
-
- throw new ComponentInitializationException("Injected service was null or not an AttributeResolver");
}
-}
\ No newline at end of file
+}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list