Giter Club home page Giter Club logo

geoserver-cloud's Introduction

Gitter DOI

GeoServer is an open source software server written in Java that allows users to share and edit geospatial data. Designed for interoperability, it publishes data from any major spatial data source using open standards.

Being a community-driven project, GeoServer is developed, tested, and supported by a diverse group of individuals and organizations from around the world.

GeoServer is the reference implementation of the Open Geospatial Consortium (OGC) Web Feature Service (WFS) and Web Coverage Service (WCS) standards, as well as a high performance certified compliant Web Map Service (WMS), compliant Catalog Service for the Web (CSW) and implementing Web Processing Service (WPS). GeoServer forms a core component of the Geospatial Web.

License

GeoServer licensed under the GPL.

Using

Please refer to the user guide for information on how to install and use GeoServer.

Building

GeoServer uses Apache Maven for a build system. To build the application run maven from the src directory.

mvn clean install

See the developer guide for more details.

Bugs

GeoServer uses JIRA, hosted by Atlassian, for issue tracking.

Mailing Lists

The mailing list page on the GeoServer web site provides access to the various mailing list, as well as some indication of the code of conduct when posting to the lists

Contributing

Please read the contribution guidelines before contributing pull requests to the GeoServer project.

More Information

Visit the website or read the docs.

geoserver-cloud's People

Contributors

alexgacon avatar allanin avatar cryptobioz avatar danduk82 avatar groldan avatar jahow avatar jemacchi avatar jwkaltz avatar marcjansen avatar mklhx avatar mlechner avatar ppradela avatar vuilleumierc avatar woutergd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

geoserver-cloud's Issues

WMS not finding/using BBoxKvpParser

GetMap requests not working, unable to parse bbox parameter, should be using org.geoserver.wfs.kvp.BBoxKvpParser. Check whether there's a missing bean definition or just a classpath problem

Build error: org.geotools.jackson.databind.filter.dto.FilterSerializationTest fails

When building on:

  • Windows 10 21H1
  • Maven 3.8.1
  • Java JDK 15.0.2 OpenJDK

The build tests fail for gt-jackson-bindings.

Log error:

`-------------------------------------------------------------------------------
Test set: org.geotools.jackson.databind.filter.dto.FilterSerializationTest

Tests run: 18, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.169 sec <<< FAILURE!
binaryTemporalOperators(org.geotools.jackson.databind.filter.dto.FilterSerializationTest) Time elapsed: 0.015 sec <<< FAILURE!
java.lang.AssertionError: expected: org.geotools.jackson.databind.filter.dto.Filter$BinaryTemporalOperator$AnyInteracts<Filter.BinaryTemporalOperator.AnyInteracts()> but was: org.geotools.jackson.databind.filter.dto.Filter$BinaryTemporalOperator$AnyInteracts<Filter.BinaryTemporalOperator.AnyInteracts()>
at org.junit.Assert.fail(Assert.java:89)
at org.junit.Assert.failNotEquals(Assert.java:835)
at org.junit.Assert.assertEquals(Assert.java:120)
at org.junit.Assert.assertEquals(Assert.java:146)
at org.geotools.jackson.databind.filter.dto.FilterSerializationTest.roundtripTest(FilterSerializationTest.java:29)
at org.geotools.jackson.databind.filter.FilterRoundtripTest.testBinaryTemporalOperator(FilterRoundtripTest.java:244)
at org.geotools.jackson.databind.filter.FilterRoundtripTest.binaryTemporalOperators(FilterRoundtripTest.java:198)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)

`

catalog/config cache

Caching CatalogInfo and config Resouce objects is orthogonal to the catalog backend, yet it has never been treated as such.
It is envisioned to use spring-cache transparently integrate with JCache or any other supported cache provider.

Care must be taken to implement cache eviction on nodes upon event-bus change notifications.

Finish up remote events handling

TODO:

  • Make sure remote events are broadcasted to all services
  • curated list of CatalogListeners to convey RemoteCatalogEvents to
  • implement handling remote resource events
  • clear up jdbcconfig CatalogInfo cache through CongifDatabase.clearCacheIfPresent()

Make wfs/wms enabled output formats configurable

Don't quite remember off the top of my head how that's done in vanilla GeoServer, so throwing this up as an idea here. Just as the enabled web components are configurable through webui-service's config properties, the enabled output formats should be.

catalog-service: an internal service to provide front services a unified catalog backend

Implement a catalog-service and the necessary clients (CatalogFacade, GeoServerFacade, etc) so that front-services (ows services, web, rest, etc) don't need to access the actual backend, but through the internal catalog-service.
Enabling the catalog-service client catalog implementation is optional and depends on the desired cluster topology.
When enabled, the services use it as their catalog, and hence the real catalog backend needs only to be configured on the catalog-service.
This can be important in situation where front-services need to scale out. With the current jdbcconfig backend and default settings for both the the catalog and the postgres database, 10 service instances blow up the available server-side max connections.
Regardless of being able to increase the max connections settings at the database side, it's a real hassle and waste of resources to have 10 or whatever connections to the database from each service, and hard to predict when it'll blow up, say, in an auto-scaling deployment.

catalog-service can itself be scaled out and participates in the bus event notifications just like any other service.

CI build

set up a ci build using github actions

Kubernetes deployment

Make it ready to deploy on k8s. Probably replacing config and discovery by kubernetes native services

wms's LegendSampleImpl.clean() fix

org.geoserver.wms.capabilities.LegendSampleImpl.clean(), called by the constructor:

private void clean() {
        for (StyleInfo style : catalog.getStyles()) {
            synchronized (style) {
                Resource styleResource = getStyleResource(style);
                Resource sampleFile;
                try {
                    // remove old samples
                    sampleFile = getSampleFile(style);
                    if (isStyleNewerThanSample(styleResource, sampleFile)) {
                        sampleFile.delete();
                    }
                } catch (IOException e) {
                    LOGGER.log(
                            Level.SEVERE,
                            "Error cleaning invalid legend sample for " + style.getName(),
                            e);
                }
            }
        }
        invalidated = new HashSet<String>();
    }
  • there's no point in synchronizing on the StyleInfo, you get a new one on each call, lock the styleResource instead
  • if (isStyleNewerThanSample(styleResource, sampleFile)) tries to delete sampleFile even if it doesn't exist

Make OWS requests support lower case 'SERVICE' parameter

Web-ui builds lower case service URL's. (e.g. http://localhost:9090/test/ows?service=WFS&...)

The Query predicate used in the gateway-service's routes supports case insensitive query parameter values but not keys.

For example:

# WFS routes
      - id: wfs # proxies requests to gateway-service:/wfs to wfs-service:/wfs
        uri: lb://wfs-service #load balanced to the wfs-service instances
        predicates:
        - Path=/wfs,/{segment}/wfs,/schemas/wfs/**
      - id: wfs_ows
        uri: lb://wfs-service
        predicates:
        - Path=/ows,/{segment}/ows
        - Query=SERVICE, (?i:WFS)

Unable to start WMS and Web UI from 1.0_M1 and M2 due to NPE

When hitting docker-compose --compatibility up -d I get very same exception under WMS and Web UI... same applies to 1.0 M1 and M2. Both when built from source and fetched from docker hub. Did minor digging in the code and it seems like WMSInfo service cannot be resolved by underlying GeoServer from catalog. But it was simple run through stack trace with not a lot insight from my side.

What do I miss?

PS: If more input required simple let me know

the infamous exception:

wms_1 | 2021-08-23 16:37:12.353 ERROR 17 --- [ main] o.s.boot.SpringApplication : Application run failed
wms_1 |
wms_1 | org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getMapKvpReader' defined in URL [jar:file:/opt/app/wms-service.jar!/BOOT-INF/lib/gs-wms-2.19.0.jar!/applicationContext.xml]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.geoserver.wms.map.GetMapKvpRequestReader]: Constructor threw exception; nested exception is java.lang.NullPointerException
wms_1 | at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:313) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:294) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879) ~[spring-context-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551) ~[spring-context-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.3.RELEASE.jar!/:2.3.3.RELEASE]
wms_1 | at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) ~[spring-boot-2.3.3.RELEASE.jar!/:2.3.3.RELEASE]
wms_1 | at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) ~[spring-boot-2.3.3.RELEASE.jar!/:2.3.3.RELEASE]
wms_1 | at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.3.3.RELEASE.jar!/:2.3.3.RELEASE]
wms_1 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.3.3.RELEASE.jar!/:2.3.3.RELEASE]
wms_1 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) ~[spring-boot-2.3.3.RELEASE.jar!/:2.3.3.RELEASE]
wms_1 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.3.3.RELEASE.jar!/:2.3.3.RELEASE]
wms_1 | at org.geoserver.cloud.wms.WmsApplication.main(WmsApplication.java:21) ~[classes!/:na]
wms_1 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
wms_1 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
wms_1 | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
wms_1 | at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na]
wms_1 | at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) ~[wms-service.jar:na]
wms_1 | at org.springframework.boot.loader.Launcher.launch(Launcher.java:109) ~[wms-service.jar:na]
wms_1 | at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) ~[wms-service.jar:na]
wms_1 | at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) ~[wms-service.jar:na]
wms_1 | Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.geoserver.wms.map.GetMapKvpRequestReader]: Constructor threw exception; nested exception is java.lang.NullPointerException
wms_1 | at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:217) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:309) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | ... 28 common frames omitted
wms_1 | Caused by: java.lang.NullPointerException: null
wms_1 | at org.geoserver.wms.map.GetMapKvpRequestReader.getTimeoutMillis(GetMapKvpRequestReader.java:177) ~[gs-wms-2.19.0.jar!/:2.19.0]
wms_1 | at org.geoserver.wms.map.GetMapKvpRequestReader.(GetMapKvpRequestReader.java:140) ~[gs-wms-2.19.0.jar!/:2.19.0]
wms_1 | at org.geoserver.wms.map.GetMapKvpRequestReader.(GetMapKvpRequestReader.java:131) ~[gs-wms-2.19.0.jar!/:2.19.0]
wms_1 | at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
wms_1 | at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[na:na]
wms_1 | at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[na:na]
wms_1 | at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source) ~[na:na]
wms_1 | at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:204) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
wms_1 | ... 30 common frames omitted
wms_1 |
wms_1 | org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getMapKvpReader' defined in URL [jar:file:/opt/app/wms-service.jar!/BOOT-INF/lib/gs-wms-2.19.0.jar!/applicationContext.xml]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.geoserver.wms.map.GetMapKvpRequestReader]: Constructor threw exception; nested exception is java.lang.NullPointerException
wms_1 | at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:313)
wms_1 | at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:294)
wms_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356)
wms_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1203)
wms_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556)
wms_1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516)
wms_1 | at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:324)
wms_1 | at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
wms_1 | at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
wms_1 | at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
wms_1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:897)
wms_1 | at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:879)
wms_1 | at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:551)
wms_1 | at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
wms_1 | at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
wms_1 | at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
wms_1 | at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
wms_1 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
wms_1 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
wms_1 | at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
wms_1 | at org.geoserver.cloud.wms.WmsApplication.main(WmsApplication.java:21)
wms_1 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
wms_1 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
wms_1 | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
wms_1 | at java.base/java.lang.reflect.Method.invoke(Unknown Source)
wms_1 | at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
wms_1 | at org.springframework.boot.loader.Launcher.launch(Launcher.java:109)
wms_1 | at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
wms_1 | at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
wms_1 | Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.geoserver.wms.map.GetMapKvpRequestReader]: Constructor threw exception; nested exception is java.lang.NullPointerException
wms_1 | at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:217)
wms_1 | at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:117)
wms_1 | at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:309)
wms_1 | ... 28 more
wms_1 | Caused by: java.lang.NullPointerException
wms_1 | at org.geoserver.wms.map.GetMapKvpRequestReader.getTimeoutMillis(GetMapKvpRequestReader.java:177)
wms_1 | at org.geoserver.wms.map.GetMapKvpRequestReader.(GetMapKvpRequestReader.java:140)
wms_1 | at org.geoserver.wms.map.GetMapKvpRequestReader.(GetMapKvpRequestReader.java:131)
wms_1 | at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
wms_1 | at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
wms_1 | at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
wms_1 | at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
wms_1 | at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:204)
wms_1 | ... 30 more
wms_1 | 2021/08/23 16:37:12 Command exited with error: exit status 255

Enable actuator's shutdown endpoint

Setting management.endpoint.shutdown.enabled=true to manually shutdown a service is not enough, a SpringBootApplication exit code generator and context listener needs to be added to the JVM would exit.

Then POST <service-address>/actuator/shutdown would gracefully tear down the service and exit.

Disable web-ui's CSRF protection against the gateway service

Getting the following when trying to save any change through the gateway:

INFO 14 --- [nio-8080-exec-8] w.p.h.CsrfPreventionRequestCycleListener : Possible CSRF attack, request URL: http://172.24.0.10:8080/web/wicket/bookmarkable/org.geoserver.web.data.store.DataAccessEditPage, Origin: http://localhost:9090, action: aborted with error 400 Origin does not correspond to request

Actuator endpoints messed up by geoserver AdvancedDispatchFilter

AdvancedDispatchFilter breaks actuator end points (e.g. /actuator/info, /actuator/health, etc). They can be accessed at /whatever/actuator instead.

Options:

  • Use a separate port for actuator. This has the advantage of higher security and should be implemented at least on the front-facing services (gateway)
management.server.port: 8081
#management.server.address: 127.0.0.1
management.endpoints.web.exposure.include: "*"
management.endpoint.shutdown.enabled: true
  • Either get rid of AdvancedDispatchFilter or make it configurable to ignore some base paths (like /actuator)

Build Error on Ubuntu 20 with Maven 3.6.3 and OpenJDK 11

Maven Info:

Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.11, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.8.0-59-generic", arch: "amd64", family: "unix"

Get the sources:
git clone https://github.com/geoserver/geoserver-cloud.git && cd geoserver-cloud

Build:
./mvnw install clean install

Failure:

[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ gs-jackson-bindings ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 73 source files to /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/config/dto/mapper/GeoServerConfigMapper.java:[92,17] error: Unmapped target property: "defaultLocale".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/config/dto/mapper/GeoServerConfigMapper.java:[152,16] error: Unmapped target properties: "internationalTitle, internationalAbstract, defaultLocale, internationalRootLayerTitle, internationalRootLayerAbstract".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/config/dto/mapper/GeoServerConfigMapper.java:[159,16] error: Unmapped target properties: "internationalTitle, internationalAbstract, defaultLocale".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/config/dto/mapper/GeoServerConfigMapper.java:[166,16] error: Unmapped target properties: "internationalTitle, internationalAbstract, defaultLocale".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/config/dto/mapper/GeoServerConfigMapper.java:[173,16] error: Unmapped target properties: "internationalTitle, internationalAbstract, defaultLocale".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/config/dto/mapper/GeoServerConfigMapper.java:[180,17] error: Unmapped target properties: "internationalTitle, internationalAbstract, defaultLocale".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/catalog/mapper/PublishedMapper.java:[43,14] error: Unmapped target properties: "internationalTitle, internationalAbstract".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/catalog/mapper/PublishedMapper.java:[47,19] error: Unmapped target properties: "internationalTitle, internationalAbstract".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/catalog/mapper/ResourceMapper.java:[43,20] error: Unmapped target properties: "internationalTitle, internationalAbstract".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/catalog/mapper/ResourceMapper.java:[48,17] error: Unmapped target properties: "internationalTitle, internationalAbstract".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/catalog/mapper/ResourceMapper.java:[56,17] error: Unmapped target properties: "internationalTitle, internationalAbstract".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/catalog/mapper/ResourceMapper.java:[61,18] error: Unmapped target properties: "internationalTitle, internationalAbstract".
[INFO] 12 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for gt-jackson-bindings 1.0-SNAPSHOT:
[INFO] 
[INFO] gt-jackson-bindings ................................ SUCCESS [  6.166 s]
[INFO] gs-cloud-pluggable-catalog-support ................. SUCCESS [ 35.968 s]
[INFO] gs-jackson-bindings ................................ FAILURE [ 12.208 s]
[INFO] gs-cloud-catalog-cache ............................. SKIPPED
[INFO] gs-cloud-event-bus ................................. SKIPPED
[INFO] gs-cloud-event-bus-amqp ............................ SKIPPED
[INFO] Spring boot starters for GeoServer cloud services .. SKIPPED
[INFO] gs-cloud-starter-jackson ........................... SKIPPED
[INFO] gs-cloud-catalog-client ............................ SKIPPED
[INFO] gs-cloud-catalog-backend-starter ................... SKIPPED
[INFO] gs-cloud-starter-vector-formats .................... SKIPPED
[INFO] gs-cloud-starter-raster-formats .................... SKIPPED
[INFO] gs-cloud-starter-webmvc ............................ SKIPPED
[INFO] gs-cloud-starter-reactive .......................... SKIPPED
[INFO] Parent pom for GeoServer microservices ............. SKIPPED
[INFO] Catalog microservice ............................... SKIPPED
[INFO] wfs-service ........................................ SKIPPED
[INFO] wms-service ........................................ SKIPPED
[INFO] wcs-service ........................................ SKIPPED
[INFO] wps-service ........................................ SKIPPED
[INFO] restconfig-service ................................. SKIPPED
[INFO] web-ui-service ..................................... SKIPPED
[INFO] Integration tests parent ........................... SKIPPED
[INFO] gs-cloud-catalog-service-it ........................ SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  54.935 s
[INFO] Finished at: 2021-07-07T08:28:24+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project gs-jackson-bindings: Compilation failure: Compilation failure: 
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/config/dto/mapper/GeoServerConfigMapper.java:[92,17] error: Unmapped target property: "defaultLocale".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/config/dto/mapper/GeoServerConfigMapper.java:[152,16] error: Unmapped target properties: "internationalTitle, internationalAbstract, defaultLocale, internationalRootLayerTitle, internationalRootLayerAbstract".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/config/dto/mapper/GeoServerConfigMapper.java:[159,16] error: Unmapped target properties: "internationalTitle, internationalAbstract, defaultLocale".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/config/dto/mapper/GeoServerConfigMapper.java:[166,16] error: Unmapped target properties: "internationalTitle, internationalAbstract, defaultLocale".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/config/dto/mapper/GeoServerConfigMapper.java:[173,16] error: Unmapped target properties: "internationalTitle, internationalAbstract, defaultLocale".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/config/dto/mapper/GeoServerConfigMapper.java:[180,17] error: Unmapped target properties: "internationalTitle, internationalAbstract, defaultLocale".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/catalog/mapper/PublishedMapper.java:[43,14] error: Unmapped target properties: "internationalTitle, internationalAbstract".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/catalog/mapper/PublishedMapper.java:[47,19] error: Unmapped target properties: "internationalTitle, internationalAbstract".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/catalog/mapper/ResourceMapper.java:[43,20] error: Unmapped target properties: "internationalTitle, internationalAbstract".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/catalog/mapper/ResourceMapper.java:[48,17] error: Unmapped target properties: "internationalTitle, internationalAbstract".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/catalog/mapper/ResourceMapper.java:[56,17] error: Unmapped target properties: "internationalTitle, internationalAbstract".
[ERROR] /home/.../geoserver-cloud/catalog-support/geoserver-jackson-bindings/src/main/java/org/geoserver/jackson/databind/catalog/mapper/ResourceMapper.java:[61,18] error: Unmapped target properties: "internationalTitle, internationalAbstract".
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <args> -rf :gs-jackson-bindings

Bring authentication and authorization to the front service (gateway)

Currently, only the default security authN/authZ is available, and worse, all services got to perform auth on their own. With each service having its own keystore, you can only guess what a nightmare changing a password is.

Remove the default security chains from internal services, perform authN/Z at the gateway level, delegating to external services as required.

Fix geoserver jdbcconfig's concurrency problem

Happens when querying all layers concurrently for example.

catalog_1    | java.util.ConcurrentModificationException: null
catalog_1    | 	at java.base/java.util.HashMap$HashIterator.nextNode(Unknown Source) ~[na:na]
catalog_1    | 	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
catalog_1    | Error has been observed at the following site(s):
catalog_1    | 	|_ checkpoint ⇢ Handler org.geoserver.cloud.catalog.api.v1.ReactiveCatalogController#findAll(String, ClassMappings) [DispatcherHandler]
catalog_1    | 	|_ checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
catalog_1    | 	|_ checkpoint ⇢ HTTP GET "/api/v1/catalog/layers/" [ExceptionHandlingWebHandler]
catalog_1    | Stack trace:
catalog_1    | 		at java.base/java.util.HashMap$HashIterator.nextNode(Unknown Source) ~[na:na]
catalog_1    | 		at java.base/java.util.HashMap$KeyIterator.next(Unknown Source) ~[na:na]
catalog_1    | 		at org.geoserver.jdbcconfig.internal.ConfigDatabase$CatalogReferenceUpdater.visit(ConfigDatabase.java:1795) ~[gs-jdbcconfig-2.18-SNAPSHOT.jar!/:2.18-SNAPSHOT]
catalog_1    | 		at org.geoserver.catalog.impl.LayerInfoImpl.accept(LayerInfoImpl.java:272) ~[gs-main-2.18-SNAPSHOT.jar!/:2.18-SNAPSHOT]
catalog_1    | 		at org.geoserver.jdbcconfig.internal.ConfigDatabase.resolveCatalog(ConfigDatabase.java:1175) ~[gs-jdbcconfig-2.18-SNAPSHOT.jar!/:2.18-SNAPSHOT]
catalog_1    | 		at org.geoserver.jdbcconfig.internal.ConfigDatabase.getById(ConfigDatabase.java:1083) ~[gs-jdbcconfig-2.18-SNAPSHOT.jar!/:2.18-SNAPSHOT]
catalog_1    | 		at org.geoserver.jdbcconfig.internal.ConfigDatabase$2.apply(ConfigDatabase.java:395) ~[gs-jdbcconfig-2.18-SNAPSHOT.jar!/:2.18-SNAPSHOT]
catalog_1    | 		at org.geoserver.jdbcconfig.internal.ConfigDatabase$2.apply(ConfigDatabase.java:391) ~[gs-jdbcconfig-2.18-SNAPSHOT.jar!/:2.18-SNAPSHOT]
catalog_1    | 		at com.google.common.collect.Lists$TransformingRandomAccessList$1.transform(Lists.java:612) ~[guava-29.0-jre.jar!/:na]
catalog_1    | 		at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:47) ~[guava-29.0-jre.jar!/:na]
catalog_1    | 		at com.google.common.collect.Iterators$5.computeNext(Iterators.java:636) ~[guava-29.0-jre.jar!/:na]
catalog_1    | 		at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:141) ~[guava-29.0-jre.jar

auto-configuration based pluggable catalog/config backend architecture

Plugging in a different catalog/config backend is cumbersome in geoserver, more even so our spring-boot service projects due to hiccups in mixed java and xml based configs.
Design and implement an auto-configuration aware mechanism to easily (or rather, clearly and cleanly) create catalog/config backend plugins.

Use JSON for remote events object and diff payload

In the current confiuration there's no need for diff and/or object payload in remote events, but supporting stateful service deployments (e.g. one data-directory per service) will need them.

Right now whether to send the diff and/or the object payload with the event is configurable through spring properties, but the payload is being encoded in XML using XStreamPersister, since the module was created before having developed the jackson codecs for geosever config objects and geotools Filter/Geometry.

Now we can get rid of that hack and use the default event encoding without a string payload object.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.