From cb44021e045ac5ab17e840e1a68701e510ad60f1 Mon Sep 17 00:00:00 2001 From: Patrick Dowler <patrick.dowler@nrc-cnrc.gc.ca> Date: Wed, 29 Jul 2015 11:18:14 -0700 Subject: [PATCH] made modest retry for all transient failures the default in ca.nrc.cadc.net; improved some error handling for ldap timeout --- .../nrc/cadc/ac/server/ldap/LdapGroupDAO.java | 8 ++++++-- .../nrc/cadc/ac/server/web/GroupsServlet.java | 1 + .../src/ca/nrc/cadc/ac/client/GMSClient.java | 18 +++++++++++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java index 23ad3b9a..78db922b 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java @@ -345,11 +345,15 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO } catch (LDAPSearchException e) { + logger.debug("Could not find groups root", e); if (e.getResultCode() == ResultCode.NO_SUCH_OBJECT) { - logger.debug("Could not find groups root", e); throw new IllegalStateException("Could not find groups root"); } + else if (e.getResultCode() == ResultCode.TIME_LIMIT_EXCEEDED) + throw new TransientException("time limit exceeded", e); + + throw new IllegalStateException("unexpected failure", e); } LdapDAO.checkLdapResult(searchResult.getResultCode()); @@ -366,7 +370,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO } catch (LDAPException e1) { - logger.debug("getGroupNames Exception: " + e1, e1); + logger.debug("getGroupNames Exception: " + e1, e1); LdapDAO.checkLdapResult(e1.getResultCode()); throw new IllegalStateException("Unexpected exception: " + e1.getMatchedDN(), e1); } diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsServlet.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsServlet.java index dd62ed5c..aad71634 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsServlet.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/GroupsServlet.java @@ -78,6 +78,7 @@ import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import ca.nrc.cadc.auth.AuthenticationUtil; +import ca.nrc.cadc.net.TransientException; public class GroupsServlet extends HttpServlet { diff --git a/projects/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClient.java b/projects/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClient.java index cb0ec4f6..ce1d0058 100755 --- a/projects/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClient.java +++ b/projects/cadcAccessControl/src/ca/nrc/cadc/ac/client/GMSClient.java @@ -110,13 +110,15 @@ import ca.nrc.cadc.net.HttpPost; import ca.nrc.cadc.net.HttpUpload; import ca.nrc.cadc.net.InputStreamWrapper; import ca.nrc.cadc.net.NetUtil; +import ca.nrc.cadc.net.event.TransferEvent; +import ca.nrc.cadc.net.event.TransferListener; /** * Client class for performing group searching and group actions * with the access control web service. */ -public class GMSClient +public class GMSClient implements TransferListener { private static final Logger log = Logger.getLogger(GMSClient.class); @@ -159,6 +161,18 @@ public class GMSClient } } + public void transferEvent(TransferEvent te) + { + if ( TransferEvent.RETRYING == te.getState() ) + log.debug("retry after request failed, reason: " + te.getError()); + } + + public String getEventHeader() + { + return null; // no custom eventID header + } + + /** * Get a list of groups. * @@ -392,8 +406,10 @@ public class GMSClient HttpPost transfer = new HttpPost(updateGroupURL, groupXML.toString(), "application/xml", true); transfer.setSSLSocketFactory(getSSLSocketFactory()); + transfer.setTransferListener(this); transfer.run(); + Throwable error = transfer.getThrowable(); if (error != null) { -- GitLab