[Geoserver-devel] [JIRA] (GEOS-7477) Assigning style within read-protected workspace using JMS clustering causes ServiceException java.lang.NullPointerException

Dion Wooning created an issue

GeoServer / BugGEOS-7477

Assigning style within read-protected workspace using JMS clustering causes ServiceException java.lang.NullPointerException

Issue Type:

BugBug

Affects Versions:

2.8.2

Assignee:

Unassigned

Components:

Community modules

Created:

30/Mar/16 11:42 AM

Environment:

Platform:
Tomcat 6 (under JBoss 5.2), OpenJDK java version 1.7.0_95, rhel-2.6.4.0.el6_7-x86_64

Setup:

  • jms-cluster-plugin added to default GeoServer war

  • 2 nodes, each their own GEOSERVER_DATA_DIR pointing to a copy of the default datadir

  • Activemq default setup with 1 broker per node, discovery through multicast:
    -Dactivemq.transportConnectors.server.uri=tcp://0.0.0.0:62626?maximumConnections=1000&wireFormat.maxFrameSize=104857600&jms.useAsyncSend=true&transport.daemon=true&trace=true
    -Dactivemq.transportConnectors.server.discoveryURI=multicast://default?group=GeoServer-T

  • cluster.properties:

    > #
    > #Wed Mar 30 09:53:18 CEST 2016
    > toggleSlave=true
    > topicName=VirtualTopic.>
    > connection=enabled
    > brokerURL=
    > durable=false
    > xbeanURL=./broker.xml
    > toggleMaster=true
    > embeddedBroker=enabled
    > CLUSTER_CONFIG_DIR=/data/geoserver/data-cluster/node0X
    > embeddedBrokerProperties=embedded-broker.properties
    > connection.retry=3
    > instanceName=aca001ec-61ae-473f-aab5-295010e29d1a
    > readOnly=disabled
    > group=geoserver-cluster-T
    > connection.maxwait=10000

Labels:

cluster jms security sld

Priority:

MediumMedium

Reporter:

Dion Wooning

Assigning a style from a read-protected workspace using JMS clustering causes ServiceException java.lang.NullPointerException, either using Admin UI or REST interface. This report will show how to reproduce using the Admin UI:

Verify clustering is working properly:

  1. use the Admin UI on node 1 to generate a new style e.g. ‘orange’ under workspace ‘topp’ for type ‘polygon’
  2. verify style is present on node 2
  3. on node 1, under tab Publishing modify default style of ‘topp:tasmania_state_boundaries’ to ‘topp:orange’
  4. on node 1, verify ‘tasmania_state_boundaries’ uses the new style using the layer preview (mind image caching, drag or zoom a bit)
  5. on node 2, verify ‘tasmania_state_boundaries’ uses the new style using the layer preview (mind image caching, drag or zoom a bit)

Reproduce the issue:

  1. node 1 and 2: under security->data, add new rule
    workspace: ‘topp’, layer: ‘*’, access mode: ‘read’, selected role: ‘GROUP_ADMIN’
  2. repeat 1-5 above with a new style e.g. ‘yellow’ within workspace ‘topp’.

RESULT: The new style is active in layer preview on node 1, node 2 FAILs to draw images, in cases causes GetCapabilities to issue an NPE as well.
Interestingly, the ‘yellow’ style IS present on node 2, and when viewing the Publishing tab of the offending layer on node 2, it does show the ‘topp:yellow’ style.

Log on node 2

> 2016-03-30 10:35:29,401 ERROR [org.geoserver.ows] (http-10.95.37.114-8080-5)
> java.lang.NullPointerException
> at org.geoserver.catalog.impl.StyleInfoImpl.getStyle(StyleInfoImpl.java:102)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:606)
> at org.geoserver.catalog.impl.ModificationProxy.invoke(ModificationProxy.java:146)
> at com.sun.proxy.$Proxy265.getStyle(Unknown Source)
> at org.geoserver.wms.map.GetMapKvpRequestReader.getDefaultStyle(GetMapKvpRequestReader.java:569)
> at org.geoserver.wms.map.GetMapKvpRequestReader.read(GetMapKvpRequestReader.java:396)
> at org.geoserver.wms.map.GetMapKvpRequestReader.read(GetMapKvpRequestReader.java:84)
> at org.geoserver.ows.Dispatcher.parseRequestKVP(Dispatcher.java:1493)
> at org.geoserver.ows.Dispatcher.dispatch(Dispatcher.java:681)
> at org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:265)
> at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
> at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
> at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
> at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
> at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
> at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:28)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:75)
> at org.geoserver.wms.animate.AnimatorFilter.doFilter(AnimatorFilter.java:71)
> at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:71)
> at org.geoserver.monitor.MonitorFilter.doFilter(MonitorFilter.java:138)
> at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:71)
> at org.geoserver.flow.controller.IpBlacklistFilter.doFilter(IpBlacklistFilter.java:95)
> at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:71)
> at org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:46)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:50)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
> at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
> at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
> at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
> at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
> at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
> at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
> at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
> at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
> at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
> at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
> at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
> at org.geoserver.security.filter.GeoServerAnonymousAuthenticationFilter.doFilter(GeoServerAnonymousAuthenticationFilter.java:54)
> at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
> at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
> at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
> at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
> at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
> at org.geoserver.security.filter.GeoServerBasicAuthenticationFilter.doFilter(GeoServerBasicAuthenticationFilter.java:83)
> at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
> at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
> at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
> at org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter$1.doFilter(GeoServerSecurityContextPersistenceFilter.java:53)
> at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
> at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
> at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
> at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
> at org.geoserver.security.GeoServerSecurityFilterChainProxy.doFilter(GeoServerSecurityFilterChainProxy.java:135)
> at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
> at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:83)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:42)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:48)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at org.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:44)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
> at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:183)
> at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:95)
> at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
> at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.internalProcess(ActiveRequestResponseCacheValve.java:74)
> at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:47)
> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
> at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:599)
> at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:451)
> at java.lang.Thread.run(Thread.java:745)

Add Comment

Add Comment

This message was sent by Atlassian JIRA (v7.2.0-OD-04-029#72002-sha1:f50e4de)

Atlassian logo