Uploaded image for project: 'GeoServer'
  1. GEOS-8491

WCS scaleFactor and CRS lookups are not thread-safe

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Medium
    • Resolution: Fixed
    • Affects Version/s: 2.10.4, 2.12.1
    • Fix Version/s: 2.12.5, 2.13.3
    • Component/s: WCS
    • Labels:
    • Environment:

      Geoserver 2.10.4
      Postgres/Postgis database backend
      Redhat 7
      Tomcat 8

      Description

      This was originally posted to the geoserver-users mailing list on 12/7/2017 with the subject "Concurrency issues with WCS". No response was received as of time of writing this issue.

      Running Geoserver 2.10.4 with a Postgres/PostGIS database.

      Configured ImageMosaic extension with a Netcdf store.

      I’m seeing errors when multiple requests are being processed for the same CoverageID, and either a scalingFactor is applied or a outputCrs/subsettingCrs is specified. Issues don’t seem related to each other, but they only come up when multiple requests are being handled concurrently.

      Sample request parameters (CoverageId removed but it is the same for all requests):

      1. (Good) geoserver/wcs?service=WCS&version=2.0.1&request=GetCoverage&subset=Lat("0","90")&subset=Long("60","150")&format=application/x-netcdf4
      2. (Random scaling error): geoserver/wcs?service=WCS&version=2.0.1&request=GetCoverage&subset=Lat("0","90")&subset=Long("60","150")&format=application/x-netcdf4&scaleFactor=0.4
      3. (Random CRS error): geoserver/wcs?service=WCS&version=2.0.1&request=GetCoverage&subset=Lat("0","90")&subset=Long("60","150")&format=application/x-netcdf4&outputCrs=http://www.opengis.net/def/crs/EPSG/0/4052

      My tests involve sending 5 requests at the same time, each with a slightly different subset on Lat/Long. For #1 above, all responses are correct.
      For #2 above, sometimes 2/5 return an exceptionreport, sometimes 3/5.
      For #3 above, only 1/5 request works, the other 4 return an “invalidCrs” exception report.

      Note that all requests return the expected responses only if a single request is sent at a time.

      Any help will be appreciated.

      scaleFactor causes following exception on most requests:

      2017-12-07 21:01:44,636 ERROR [geoserver.ows] -
      org.geoserver.wcs2_0.exception.WCS20Exception: Failed to read the coverage
      at org.geoserver.wcs2_0.GetCoverage.run(GetCoverage.java:305)
                     at org.geoserver.wcs2_0.DefaultWebCoverageService20.getCoverage(DefaultWebCoverageService20.java:138)
      …
      Caused by: java.lang.NullPointerException
              at org.geoserver.wcs2_0.ScalingPolicy$2.scale(ScalingPolicy.java:136)
              at org.geoserver.wcs2_0.GetCoverage.handleScaling(GetCoverage.java:1503)
              at org.geoserver.wcs2_0.GetCoverage.setupCoverage(GetCoverage.java:380)
              at org.geoserver.wcs2_0.GetCoverage.run(GetCoverage.java:293)
              ... 112 more
      

      outputCrs causes following exception on all but 1 request:

      2017-12-07 21:07:40,380 DEBUG [geoserver.wcs2_0] - Added extension outputCrs
      2017-12-07 21:07:40,380 ERROR [geoserver.ows] -
      org.geoserver.wcs2_0.exception.WCS20Exception: Invalid outputCrs
      HTTPcode:404
              at org.geoserver.wcs2_0.GetCoverage.extractCRSInternal(GetCoverage.java:1085)
              at org.geoserver.wcs2_0.GetCoverage.extractOutputCRS(GetCoverage.java:1047)
              at org.geoserver.wcs2_0.GetCoverage.parseGridCoverageRequest(GetCoverage.java:551)
              at org.geoserver.wcs2_0.GetCoverage.run(GetCoverage.java:244)
              at org.geoserver.wcs2_0.DefaultWebCoverageService20.getCoverage(DefaultWebCoverageService20.java:138)
                      …
                      Caused by: org.opengis.referencing.NoSuchAuthorityCodeException: No code "EPSG:4052" from authority "European Petroleum Survey Group" found for object of type "IdentifiedObject".
              at org.geotools.referencing.factory.AbstractAuthorityFactory.noSuchAuthorityCode(AbstractAuthorityFactory.java:952)
              at org.geotools.referencing.factory.PropertyAuthorityFactory.getWKT(PropertyAuthorityFactory.java:316)
              at org.geotools.referencing.factory.PropertyAuthorityFactory.createCoordinateReferenceSystem(PropertyAuthorityFactory.java:390)
              at org.geotools.referencing.factory.BufferedAuthorityFactory.createCoordinateReferenceSystem(BufferedAuthorityFactory.java:783)
              at org.geotools.referencing.factory.AuthorityFactoryAdapter.createCoordinateReferenceSystem(AuthorityFactoryAdapter.java:802)
              at org.geotools.referencing.factory.AuthorityFactoryAdapter.createCoordinateReferenceSystem(AuthorityFactoryAdapter.java:802)
              at org.geoserver.wcs2_0.GetCoverage.extractCRSInternal(GetCoverage.java:1083)
              ... 115 more
      

        Attachments

          Activity

            People

            • Assignee:
              aaime Andrea Aime
              Reporter:
              apeirats alberto
            • Votes:
              3 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: