AtlasOfLivingAustralia / biocache-service

Occurrence & mapping webservices
https://biocache-ws.ala.org.au/ws/
Other
9 stars 26 forks source link

Add a failsafe when the ANDS DOI service is broken #255

Closed ansell closed 6 years ago

ansell commented 6 years ago

The ANDS DOI service is broken right now, which means that all downloads through biocache-clustered are broken. All services have been reverted back to biocache-service-1.x (biocache-lb) until the situation is fixed.

We need to have a failsafe in biocache-service for when this occurs. In particular, downloads must never fail if the DOI service is unavailable and the download would have otherwise succeeded.

I verified that the ANDS DOI status using the following URL, based on looking through the doi.ala.org.au sourcecode.

https://services.ands.org.au/doi/1.1/status.json

{
  "response": {
    "responsecode": "MT091",
    "verbosemessage": "(took ms)",
    "message": "Uh oh! DOI Service unavailable (unable to process upstream DOI request). Please try again in a few moments. ",
    "type": "failure",
    "code": 500,
    "doi": "",
    "url": "",
    "app_id": ""
  }
}

The log messages on doi.ala.org.au were:

2018-07-24 08:22:30.724 ERROR --- [nio-8080-exec-7] o.g.web.errors.GrailsExceptionResolver   : DoiMintingException occurred when processing request: [POST] /api/doi
Failed to invoke the provider web mint service: The service invocation returned HTTP 0 and error 'The ANDS DOI minting service is not available.'. Stacktrace follows:

au.org.ala.doi.exceptions.DoiMintingException: Failed to invoke the provider web mint service: The service invocation returned HTTP 0 and error 'The ANDS DOI minting service is not available.'
        at au.org.ala.doi.providers.DoiProviderService.mintDoi(DoiProviderService.groovy:57)
        at au.org.ala.doi.DoiService.$tt__mintDoi(DoiService.groovy:70)
        at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
        at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
        at au.org.ala.doi.ws.DoiController.save(DoiController.groovy:131)
        at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223)
        at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
        at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
        at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
        at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
        at au.org.ala.cas.client.UriFilter.doFilter(UriFilter.java:199)
        at au.org.ala.cas.client.UriFilter.doFilter(UriFilter.java:199)
        at au.org.ala.cas.client.UriFilter.doFilter(UriFilter.java:199)
        at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:97)
        at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

2018-07-24 08:23:07.160 ERROR --- [io-8080-exec-10] StackTrace                               : Full Stack Trace:

au.org.ala.doi.exceptions.DoiMintingException: Failed to invoke the provider web mint service: The service invocation returned HTTP 0 and error 'The ANDS DOI minting service is not available.'
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83)
        at org.codehaus.groovy.reflection.CachedConstructor.doConstructorInvoke(CachedConstructor.java:77)
        at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrap.callConstructor(ConstructorSite.java:84)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247)
        at au.org.ala.doi.providers.DoiProviderService.mintDoi(DoiProviderService.groovy:57)
        at au.org.ala.doi.providers.DoiProviderService$mintDoi.call(Unknown Source)
        at au.org.ala.doi.DoiService.$tt__mintDoi(DoiService.groovy:70)
        at sun.reflect.GeneratedMethodAccessor603.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
        at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:925)
        at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:908)
        at org.codehaus.groovy.runtime.InvokerHelper.invokeMethodSafe(InvokerHelper.java:76)
        at au.org.ala.doi.DoiService$_mintDoi_closure1.doCall(DoiService.groovy)
        at sun.reflect.GeneratedMethodAccessor675.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
        at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
        at groovy.lang.Closure.call(Closure.java:414)
        at groovy.lang.Closure.call(Closure.java:430)
        at grails.gorm.transactions.GrailsTransactionTemplate$2.doInTransaction(GrailsTransactionTemplate.groovy:94)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
        at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
        at au.org.ala.doi.DoiService.mintDoi(DoiService.groovy)
        at au.org.ala.doi.DoiService$mintDoi$2.call(Unknown Source)
        at au.org.ala.doi.ws.DoiController.save(DoiController.groovy:131)
        at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223)
        at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
        at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:110)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at au.org.ala.cas.client.UriFilter.doFilter(UriFilter.java:199)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at au.org.ala.cas.client.UriFilter.doFilter(UriFilter.java:199)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at au.org.ala.cas.client.UriFilter.doFilter(UriFilter.java:199)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:97)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
        at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:677)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1457)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)

The log messages on prod-bdown-b5 were:

2018-07-24 08:23:07,165 [biocachedownload-pool-100000000-RECORDS_INDEX-0] ERROR au.org.ala.biocache.service.DoiService  (DoiService.java:131) - Error creating DOI for request au.org.ala.doi.CreateDoiRequest@2d8ffdca:<!DOCTYPE html>
<html lang="en-AU">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta name="app.version" content="1.0.1"/>
    <meta name="app.build" content=""/>
    <meta name="description" content="Atlas of Living Australia"/>
    <meta name="author" content="Atlas of Living Australia">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- Favicon -->

      <link rel="apple-touch-icon" sizes="57x57" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/apple-icon-57x57.png">
      <link rel="apple-touch-icon" sizes="60x60" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/apple-icon-60x60.png">
      <link rel="apple-touch-icon" sizes="72x72" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/apple-icon-72x72.png">
      <link rel="apple-touch-icon" sizes="76x76" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/apple-icon-76x76.png">
      <link rel="apple-touch-icon" sizes="114x114" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/apple-icon-114x114.png">
      <link rel="apple-touch-icon" sizes="120x120" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/apple-icon-120x120.png">
      <link rel="apple-touch-icon" sizes="144x144" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/apple-icon-144x144.png">
      <link rel="apple-touch-icon" sizes="152x152" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/apple-icon-152x152.png">
      <link rel="apple-touch-icon" sizes="180x180" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/apple-icon-180x180.png">
      <link rel="icon" type="image/png" sizes="192x192" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/android-icon-192x192.png">
      <link rel="icon" type="image/png" sizes="32x32" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/favicon-32x32.png">
      <link rel="icon" type="image/png" sizes="96x96" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/favicon-96x96.png">
      <link rel="icon" type="image/png" sizes="16x16" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/favicon-16x16.png">
      <link rel="manifest" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/manifest.json?v2">
      <meta name="msapplication-TileColor" content="#ffffff">
      <meta name="msapplication-TileImage" content="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/ms-icon-144x144.png">
      <meta name="theme-color" content="#ffffff">

    <link rel="apple-touch-icon" sizes="180x180" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/apple-touch-icon.png">
    <link rel="icon" type="image/png" sizes="32x32" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="16x16" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/favicon-16x16.png">
    <link rel="manifest" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/manifest.json">
    <link rel="mask-icon" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/safari-pinned-tab.svg" color="#5bbad5">
    <link rel="shortcut icon" href="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/favicon.ico">
    <meta name="msapplication-config" content="https://www.ala.org.au/wp-content/themes/ala-wordpress-theme/img/favicon/browserconfig.xml">
    <meta name="theme-color" content="#ffffff">

    <title>ALA DOI Repository</title>

        <link href="https://www.ala.org.au/commonui-bs3/css/bootstrap.min.css" rel="stylesheet"
              media="screen,print"/>

        <link href="https://www.ala.org.au/commonui-bs3/css/ala-styles.css" rel="stylesheet"
              media="screen,print"/>

    <link rel="stylesheet" media="screen,print" href="/assets/core-screen-print-33302e79a81ebc2dea940c077b2450f1.css"/>
    <link rel="stylesheet" href="/assets/core-b723a29fac7a87ba1773e821f0390498.css"/>

    <script type="text/javascript" src="/assets/head-8c8036233f3a7101077bd2c1b799e348.js" ></script>

        <script type="text/javascript" src="https://www.ala.org.au/commonui-bs3/js/application.js"
                defer></script>

        <script type="text/javascript"
                src="https://www.ala.org.au/commonui-bs3/js/bootstrap.min.js"></script>

    <meta name="layout" content="main"/>

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
        <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->

    <link rel="stylesheet" href="/assets/doi-7624138d775322159a5372b5293ade1f.css"/>

<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
</head>
<body class="" id="" onload="">

<!-- Header -->
<!-- Navbar start -->
  <nav class="navbar navbar-default navbar-fixed-top not-logged-in">
    <div class="container container-navbar">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="https://www.ala.org.au/">
          <img alt="Brand" src="https://www.ala.org.au/commonui-bs3/img/ala-logo-2016-inline.png">
        </a>
      </div>

      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
        <div class="row row-search">
          <div class="col-xs-12 col-sm-4 col-md-6">
            <form id="global-search" class="banner" action="https://bie.ala.org.au/search" method="get" name="search-form">
              <div class="icon-addon addon-lg">
                <input type="text" placeholder="Search the Atlas ..." class="form-control autocomplete" id="biesearch" name="q">
                <label for="biesearch" class="glyphicon glyphicon-search" rel="tooltip" title="search"></label>
              </div>
            </form>
          </div>
          <div class="col-md-2 hidden-xs">
            <ul class="nav navbar-nav navbar-right nav-login">
              <li><a href='https://auth.ala.org.au/cas/login?service=https://doi.ala.org.au/api/doi' class='null'>Log in</a></li>
            </ul>
            <ul class="nav navbar-nav navbar-right nav-logged-in">
              <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                  My profile
                  <span class="caret"></span>
                </a>
                <ul class="dropdown-menu" role="menu">
                  <li><a href="https://auth.ala.org.au/userdetails/myprofile/">View profile</a></li>
                  <li><a href="https://auth.ala.org.au/userdetails/registration/editAccount">Account settings</a></li>
                  <li class="divider"></li>
                  <li><a href='https://auth.ala.org.au/cas/login?service=https://doi.ala.org.au/api/doi' class='null'>Log in</a></li>
                </ul>
              </li>
            </ul>

          </div>
        </div><!-- End row -->

        <ul class="nav navbar-nav">
          <!-- <li class="active"><a href="#">Home</a></li> -->
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
              Start exploring
              <span class="caret"></span>
            </a>
            <ul class="dropdown-menu" role="menu">
              <li><a href="https://lists.ala.org.au/iconic-species">Australian iconic species</a></li>
              <li><a href="https://biocache.ala.org.au/explore/your-area">Explore your area</a></li>
              <li><a href="http://regions.ala.org.au/">Explore regions</a></li>
              <li><a href="https://biocache.ala.org.au/search">Search occurrence records</a></li>
              <li class="divider"></li>
              <li><a href="https://www.ala.org.au/sites-and-services/">Sites &amp; services</a></li>
            </ul>
          </li>
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
              Search &amp; analyse
              <span class="caret"></span>
            </a>
            <ul class="dropdown-menu" role="menu">
              <li><a href="https://collections.ala.org.au/">Browse natural history collections</a></li>
              <li><a href="https://collections.ala.org.au/datasets">Search datasets</a></li>
              <li><a href="https://downloads.ala.org.au">Download datasets</a>
              <li><a href="http://spatial.ala.org.au/">Spatial portal</a></li>
              <li class="divider"></li>
              <li><a href="https://dashboard.ala.org.au/">ALA dashboard</a></li>
            </ul>
          </li>
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
              Participate
              <span class="caret"></span>
            </a>
            <ul class="dropdown-menu" role="menu">
              <li><a href="https://biocollect.ala.org.au/acsa">Join a Citizen Science project</a></li>
              <li><a href="https://sightings.ala.org.au/">Record a sighting in the ALA</a></li>
              <li><a href="https://www.ala.org.au/submit-dataset-to-ala/">Submit a dataset to the ALA</a></li>
              <li><a href="https://digivol.ala.org.au/">Digitise a record in DigiVol</a></li>
              <li><a href="https://www.ala.org.au/who-we-are/downloadable-tools/ala-mobile-app/">Mobile apps</a></li>
            </ul>
          </li>
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
              Learn about the ALA
              <span class="caret"></span>
            </a>
            <ul class="dropdown-menu" role="menu">
              <li><a href="https://www.ala.org.au/who-we-are/">Who we are</a></li>
              <li class="divider"></li>
              <li><a href="https://www.ala.org.au/how-to-use-ala/">How to use the ALA</a></li>
              <li><a href="https://www.ala.org.au/how-to-work-with-data/">How to work with data</a></li>
              <li><a href="https://www.ala.org.au/how-to-cite-ala/">How to cite the ALA</a></li>
              <li class="divider"></li>
              <li><a href="https://www.ala.org.au/education-resources/">Education resources</a></li>
              <li><a href="https://www.ala.org.au/ala-and-indigenous-ecological-knowledge-iek/">Indigenous Ecological Knowledge</a></li>
              <li class="divider"></li>
              <li><a href="https://www.ala.org.au/blogs-news/">ALA Blog</a></li>
              <li class="divider"></li>
              <li><a href="https://www.ala.org.au/about-the-atlas/contact-us/">Contact us</a></li>
              <li><a href="https://www.ala.org.au/about-the-atlas/feedback-form/">Feedback form</a></li>
            </ul>
          </li>
        </ul>
        <ul class="nav navbar-nav navbar-right visible-xs">
          <li><a href="https://auth.ala.org.au/userdetails/myprofile/"><span class="nav-login">View profile</span></a></li>
          <li><a href="https://auth.ala.org.au/userdetails/registration/editAccount"><span class="nav-login">Account settings</span></a></li>
          <li><a href='https://auth.ala.org.au/cas/login?service=https://doi.ala.org.au/api/doi' class='null'>Log in</a></li>
        </ul>
      </div><!-- /.navbar-collapse -->
    </div><!-- /.container -->
  </nav>
  <!-- End Navbar -->

<!-- End header -->
<!-- Breadcrumb -->
<section id="breadcrumb">
    <div class="container">
        <div class="row">
            <nav aria-label="Breadcrumb" role="navigation">
                <ol class="breadcrumb-list">
                    <li><a href="https://www.ala.org.au/">Home</a></li>

                    <li class="active">ALA DOI Repository</li>
                </ol>
            </nav>
        </div>
    </div>
</section>
<!-- End Breadcrumb -->
<!-- Optional banner message (requires ala-admin-plugin) -->

<!-- end banner message -->
<!-- Container -->
<div class="container" id="main">

<ala:systemMessage/>

<div class="col-sm-12 col-md-9 col-lg-9">

    <h2 class="heading-medium">Error</h2>

    <div class="row">
        <div class="col-sm-12">

                <div class="alert alert-danger">
                    An unexpected error has occurred
                </div>

        </div>
    </div>
</div>

</div><!-- End container #main col -->

 <footer>
    <!-- Container -->
    <div class="container footer-container ">
      <hr class="footer-border">
      <div class="row footer-nav">

        <div class="col-md-12 margin-bottom-2">
          <h2 class="heading-large margin-bottom-quarter-1">Atlas of Living Australia</h2>
          <h3 class="promotional">Sharing biodiversity knowledge to shape our future</h3>
        </div>

        <div class="col-xs-6 col-sm-3 col-lg-3 hidden-print">
          <h5>Start exploring</h5>
          <ul class="link-list">
            <li><a href="https://lists.ala.org.au/iconic-species">Australian iconic species</a></li>
            <li><a href="https://biocache.ala.org.au/explore/your-area">Explore your area</a></li>
            <li><a href="http://regions.ala.org.au/">Explore regions</a></li>
            <li><a href="https://biocache.ala.org.au/search">Search occurrence records</a></li>
            <li><a href="https://www.ala.org.au/sites-and-services/">Sites &amp; services</a></li>
          </ul>
        </div>

        <div class="col-xs-6 col-sm-3 col-lg-3 hidden-print">
          <h5>Search &amp; analyse</h5>
          <ul class="link-list">
            <li><a href="https://collections.ala.org.au/">Browse natural history collections</a></li>
            <li><a href="https://collections.ala.org.au/datasets">Search datasets</a></li>
            <li><a href="https://downloads.ala.org.au">Download datasets</a>
            <li><a href="http://spatial.ala.org.au/">Spatial portal</a></li>
            <li><a href="https://dashboard.ala.org.au/">ALA dashboard</a></li>
          </ul>
        </div>

        <div class="clearfix visible-xs-block">
          <!-- This fixes the alignment issues of the footer columns -->
        </div>

        <div class="col-xs-6 col-sm-3 col-lg-3 hidden-print">
          <h5 class="footer-second-row">Participate</h5>
          <ul class="link-list">
            <li><a href="https://biocollect.ala.org.au/acsa">Join a citizen science project</a></li>
            <li><a href="https://sightings.ala.org.au/">Record a sighting</a></li>
            <li><a href="https://www.ala.org.au/submit-dataset-to-ala/">Submit a dataset to the ALA</a></li>
            <li><a href="https://digivol.ala.org.au/">Digitise a record</a></li>
            <li><a href="https://www.ala.org.au/who-we-are/downloadable-tools/ala-mobile-app/">Mobile apps</a></li>
          </ul>
        </div>

        <div class="col-xs-6 col-sm-3 col-lg-3 hidden-print">
          <h5 class="footer-second-row">Learn about the ALA</h5>
          <ul class="link-list">
            <li><a href="https://www.ala.org.au/who-we-are/">Who we are</a></li>
            <li><a href="https://www.ala.org.au/how-to-use-ala/">How to use the ALA</a></li>
            <li><a href="https://www.ala.org.au/how-to-work-with-data/">How to work with data</a></li>
            <li><a href="https://www.ala.org.au/how-to-cite-ala/">How to cite the ALA</a></li>
            <li><a href="https://www.ala.org.au/education-resources/">Education resources</a></li>
            <li><a href="https://www.ala.org.au/ala-and-indigenous-ecological-knowledge-iek/">Indigenous Ecological Knowledge</a></li>
            <li><a href="https://www.ala.org.au/blogs-news/">ALA Blog</a></li>
            <li><a href="https://www.ala.org.au/about-the-atlas/contact-us/">Contact us</a></li>
            <li><a href="https://www.ala.org.au/about-the-atlas/feedback-form/">Feedback form</a></li>
          </ul>
        </div>
      </div>

      <div class="row footer-bonus">
        <div class="col-md-4 col-sm-12 footer-bonus-item">
          <h5 class="footer-bonus-heading">Explore the Spatial Portal</h5>
          <a href="http://spatial.ala.org.au/" title="Spatial portal" class="footer-bonus-link">
            <img class="img-responsive" src="https://www.ala.org.au/commonui-bs3/img/footer-bonus-spatial-portal-icon.png" alt="Spatial Portal icon">
          </a>
          <p class="footer-bonus-description"><a href="http://spatial.ala.org.au/">Explore species occurrence records</a> in the context of their environment. Find records and model species distributions. Export reports, maps and data.</p>
        </div>
        <div class="col-md-4 col-sm-12 footer-bonus-item">
          <h5 class="footer-bonus-heading">Join a Citizen Science Project</h5>
          <a href="https://biocollect.ala.org.au/acsa" title="Contribute your sightings" class="footer-bonus-link">
            <img class="img-responsive" src="https://www.ala.org.au/commonui-bs3/img/footer-bonus-cit-science-icon.png" alt="Citizen Science icon">
          </a>
          <p class="footer-bonus-description">Find out how you can <a href="https://biocollect.ala.org.au/acsa">contribute to a citizen science project</a> in your area, or explore one of the many citizen science projects supported by the ALA.</p>
        </div>
        <div class="col-md-4 col-sm-12 footer-bonus-item">
          <h5 class="footer-bonus-heading">Record a sighting</h5>
          <a href="https://sightings.ala.org.au/" title="Did you see something?" class="footer-bonus-link">
            <img class="img-responsive" src="https://www.ala.org.au/commonui-bs3/img/footer-bonus-record-sighting-icon.png" alt="Sightings icon">
          </a>
          <p class="footer-bonus-description">Did you see something? Photograph something? <a href="https://sightings.ala.org.au/">Contribute your sighting</a> to the Atlas of Living Australia.</p>
        </div>

      </div>
      <!-- Acknowledgement section -->
      <div class="row col-sm-12 acknowledgement-callout acknowledgement-callout-ala">
        <div class="col-md-10 col-sm-12">
          <h4 class="margin-bottom-half-1">Acknowledgement of Traditional Owners and Country</h4>
          <p>The Atlas of Living Australia acknowledges Australia's Traditional Owners and pays respect to the past and present Elders of the nation's Aboriginal and Torres Strait Islander communities. We honour and celebrate the spiritual, cultural and customary connections of Traditional Owners to country and the biodiversity that forms part of that country.</p>
        </div>
        <div class="clearfix"></div>
      </div>
      <!-- Logo section -->
      <div class="row">
        <div class="col-md-12">
          <h5 class="footer-bonus-heading">The ALA is made possible by contributions from its partners, is supported by NCRIS and hosted by CSIRO</h5>
        </div>
      </div>

      <div class="row">
        <div class="col-md-12 footer-bonus-brands">
          <a href="https://www.education.gov.au/national-collaborative-research-infrastructure-strategy-ncris" class="img-responsive" id="ncris">NCRIS</a>
          <a href="https://www.csiro.au/" id="csiro">CSIRO</a>
          <a href="https://www.gbif.org/" class="img-responsive" id="gbif">GBIF</a>
        </div>
      </div>
      <!-- End logo section -->

      <div class="row">
        <div class="col-md-12">
          <ul class="footer-list">
            <li class="footer-item footer-social">
              <a id="twitter" title="Twitter" href="https://twitter.com/#!/atlaslivingaust"><img src="https://www.ala.org.au/commonui-bs3/img/social_twitter_29px.png" alt="Twitter" /></a>
            </li>
            <li class="footer-item footer-social">
              <a id="facebook" title="Facebook" href="https://www.facebook.com/atlasoflivingaustralia"><img src="https://www.ala.org.au/commonui-bs3/img/social_facebook_29px.png" alt="Facebook" /></a>
            </li>
            <li class="footer-item footer-item-text footer-item-start"><a href="https://www.ala.org.au/who-we-are/terms-of-use/#Copyright">Copyright</a></li>
            <li class="footer-item footer-item-text"><a href="https://www.ala.org.au/about-the-atlas/terms-of-use/">Terms of use</a></li>
            <li class="footer-item footer-item-text"><a href="https://www.ala.org.au/about-the-atlas/contact-us/">Contact us</a></li>
            <li class="footer-item footer-item-status"><a href="http://status.ala.org.au/">System status</a></li>
          </ul>
        </div>
      </div>
    </div><!-- End Container -->
  </footer>

  <!-- Creative commons bar -->
  <div class="alert alert-creativecommons hidden-print" role="alert">
    <div class="container alert-container">
      <div class="row-fluid">
        <div class="col-md-12">
          <p class="alert-text text-creativecommons">
            This work is licensed under a <a href="https://creativecommons.org/licenses/by/3.0/au/">Creative Commons Attribution 3.0 Australia License</a>&ensp;<a rel="license" href="https://creativecommons.org/licenses/by/3.0/au/"><img alt="Creative Commons License" style="border-width:0" src="https://licensebuttons.net/l/by/3.0/80x15.png"></a>
          </p>
        </div>
      </div>
    </div>
  </div><!-- End Creative commons bar -->

<script type="text/javascript" src="/assets/jquery-extensions-7b19c40c8f992cd9158cdeb038c17e80.js" ></script>

</body>
</html>
2018-07-24 08:23:07,166 [biocachedownload-pool-100000000-RECORDS_INDEX-0] ERROR au.org.ala.biocache.service.DownloadService  (DownloadService.java:1268) - Error in offline download, sending email. download path: /data/biocache-download/biocache-download/ad425ee9-ad26-309f-80ec-bf0a27da52de/1532384558593/records-2018-07-24.zip
java.lang.RuntimeException: Unable to mint DOI for https://avh.ala.org.au/occurrences/search?q=*%3A*&fq=cl1049%3A%22Northern+Jarrah+Forest%22&qc=data_hub_uid:dh9
    at au.org.ala.biocache.service.DoiService.mintDoi(DoiService.java:132)
    at au.org.ala.biocache.service.DoiService.mintDoi(DoiService.java:170)
    at au.org.ala.biocache.service.DownloadService.writeQueryToStream(DownloadService.java:621)
    at au.org.ala.biocache.service.DownloadService$DownloadCreatorImpl$1.call(DownloadService.java:1187)
    at au.org.ala.biocache.service.DownloadService$DownloadCreatorImpl$1.call(DownloadService.java:1158)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
2018-07-24 08:23:07,166 [biocachedownload-pool-100000000-RECORDS_INDEX-0] DEBUG au.org.ala.biocache.service.EmailService  (EmailService.java:64) - Send email to : <REDACTED>@<REDACTED>
2018-07-24 08:23:07,190 [biocachedownload-pool-100000000-RECORDS_INDEX-0] DEBUG au.org.ala.biocache.dao.JsonPersistentQueueDAOImpl  (JsonPersistentQueueDAOImpl.java:231) - Removing the download from the queue
2018-07-24 08:23:07,190 [biocachedownload-pool-100000000-RECORDS_INDEX-0] INFO au.org.ala.biocache.dao.JsonPersistentQueueDAOImpl  (JsonPersistentQueueDAOImpl.java:236) - Deleting /data/cache/downloads/offline1532384558593.json true
ansell commented 6 years ago

The ANDS DOI service may be back again (possibly due to an upstream issue with DataCite), and the status URL now returns the following:

{
  "response": {
    "responsecode": "MT090",
    "verbosemessage": "(took 1ms)",
    "message": "The rocket is ready to blast off -- all systems are go!",
    "type": "success",
    "code": 200,
    "doi": "",
    "url": "",
    "app_id": ""
  }
}
ansell commented 6 years ago

The DataCite status page which shows intermittent outages is:

http://status.datacite.org

javier-molina commented 6 years ago

Download service accepts an optional mintDoi boolean parameter which defaults to false for backwards compatibility and can be used to bypass doi minting.

Downloads plugin however seems to be always setting that to true and currently there is no way to make it configurable.

https://github.com/AtlasOfLivingAustralia/downloads-plugin/blob/235da2c48efe13e47b11338aa8568f4b4bcb77c5/src/main/groovy/au/org/ala/downloads/DownloadParams.groovy#L56

ansell commented 6 years ago

This isn't a user interface issue. We still want all downloads to have DOIs. The core issue is that the download must not fail if the DOI service isn't available.

javier-molina commented 6 years ago

Working on first part.

[9:51 AM] Peter Ansell: The core is that we need a failsafe where we are still able to deliver downloads successfully to users when DOI registration fails. [9:52 AM] Peter Ansell: One part of that will definitely need to be adding code to biocache-service to catch the failure of the DOI registration, log it, and continue, possibly with a different email template that lets them know the DOI is not available for that download. [9:54 AM] Peter Ansell: Another part may be adding some sort of retry mechanism to doi-service internally and block on the response for a bit longer before returning, and verify that biocache-service is able to sit and wait for the response. Or you could make it a callback to avoid relying on the HTTPS/TCP connection staying open, and biocache-service configurably knows how long to wait before making the download succeed without a DOI

ansell commented 6 years ago

Closing this based on Javier's testing of the code that switches back to using /data/biocache-download if the preferred DOI method fails, so when DataCite is broken ALA users can still get access to downloads.

We can discuss more fancy options like asynchronous retries to get a DOI in the future.