Hi,
Hi,
Both lists are OK. It is good that also other users get known to the issue, and because you did not get a working solution from the users list then dev list maybe puts more pressure for the developers to answer.
If the name is automatically created from the EPSG database by concatenating the name and code I believe that the right solution is to modify the table creation script to use for example VARCHAR(64). Change feels small but of course it may have side effects.
-Jukka Rahkonen-
-----Alkuperäinen viesti-----
Lähettäjä: vsinceac <victor.sinceac@anonymised.com>
Lähetetty: keskiviikko 28. lokakuuta 2020 11.41
Vastaanottaja: geoserver-devel@lists.sourceforge.net
Aihe: [Geoserver-devel] Integrated GWC hardcodes GRIDSET_ID VARCHAR(32), while Geoserver has longer strings
Hi,
GeoServer 2.18.0 with embedded GWC: after adding new "Gridset" (here, "WGS
84 / UTM Zone 34N (EPSG:32634)") in section "Tile Caching" of a layer, I got this error:
---------------
ERROR [geoserver.gwc] - Failed to get a quota store, the GeoWebCache disk quota subsystem will stop working now
org.springframework.dao.ConcurrencyFailureException: Failed to create or locate tileset TileSet[messir:countries_and_water#WGS 84 / UTM Zone 34N (EPSG:32634)#image/png#408a9289e97a734867475b5c5178621c355e6e28] after 100 attempts; nested exception is
org.geowebcache.diskquota.jdbc.ParametricDataAccessException: Failed to execute statement INSERT INTO TILESET select :key, :layerName, :gridSetId, :blobFormat, :parametersId, 0 WHERE NOT EXISTS(SELECT 1 FROM TILESET WHERE KEY = :key) with params: {blobFormat=image/png, gridSetId=WGS 84 / UTM Zone 34N (EPSG:32634), layerName=messir:countries_and_water,
parametersId=408a9289e97a734867475b5c5178621c355e6e28,
key=messir:countries_and_water#WGS 84 / UTM Zone 34N (EPSG:32634)#image/png#408a9289e97a734867475b5c5178621c355e6e28}; nested exception is org.springframework.jdbc.UncategorizedSQLException:
PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO TILESET select ?, ?, ?, ?, ?, 0 WHERE NOT EXISTS(SELECT 1 FROM TILESET WHERE KEY = ?)]; SQL state [90005]; error code [90005]; Value too long for column GRIDSET_ID VARCHAR(32): 'WGS 84 / UTM Zone 34N (EPSG:32634)' (34); SQL statement:
INSERT INTO TILESET select ?, ?, ?, ?, ?, 0 WHERE NOT EXISTS(SELECT 1 FROM TILESET WHERE KEY = ?) [90005-119]; nested exception is
org.h2.jdbc.JdbcSQLException: Value too long for column GRIDSET_ID
VARCHAR(32): 'WGS 84 / UTM Zone 34N (EPSG:32634)' (34); [... ETC ...] Caused by: org.geowebcache.diskquota.jdbc.ParametricDataAccessException:
Failed to execute statement INSERT INTO TILESET select :key, :layerName, :gridSetId, :blobFormat, :parametersId, 0 WHERE NOT EXISTS(SELECT 1 FROM TILESET WHERE KEY = :key) with params: {blobFormat=image/png, gridSetId=WGS
84 / UTM Zone 34N (EPSG:32634), layerName=messir:countries_and_water,
parametersId=408a9289e97a734867475b5c5178621c355e6e28,
key=messir:countries_and_water#WGS 84 / UTM Zone 34N (EPSG:32634)#image/png#408a9289e97a734867475b5c5178621c355e6e28}; nested exception is org.springframework.jdbc.UncategorizedSQLException:
PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO TILESET select ?, ?, ?, ?, ?, 0 WHERE NOT EXISTS(SELECT 1 FROM TILESET WHERE KEY = ?)]; SQL state [90005]; error code [90005]; Value too long for column GRIDSET_ID VARCHAR(32): 'WGS 84 / UTM Zone 34N (EPSG:32634)' (34); SQL statement:
[... ETC ...]
Caused by: org.springframework.jdbc.UncategorizedSQLException:
PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO TILESET select ?, ?, ?, ?, ?, 0 WHERE NOT EXISTS(SELECT 1 FROM TILESET WHERE KEY = ?)]; SQL state [90005]; error code [90005]; Value too long for column GRIDSET_ID VARCHAR(32): 'WGS 84 / UTM Zone 34N (EPSG:32634)' (34); SQL statement:
[... ETC ...]
Caused by: org.h2.jdbc.JdbcSQLException: Value too long for column GRIDSET_ID VARCHAR(32): 'WGS 84 / UTM Zone 34N (EPSG:32634)' (34); SQL
statement:
[... ETC ...]
-----------------
Indeed, GWC has hardcoded value "GRIDSET_ID VARCHAR(32)" (see code below), while obviously GeoServer has strings with length > 32 chars to be recorded in this column.
Any idea on how to fix this (without rebuilding GeoServer)?
Many thanks,
Victor Sinceac
PS: I posted the same on "users" forum, but I guess "dev" forum is more appropriate...
geowebcache-master\geowebcache\diskquota\jdbc\src\main\java\org\geowebcache\diskquota\jdbc\SQLDialect.java
// size guesses: 128 characters should be more than enough for layer name, the gridset id
// is normally an epsg code so 32 is way more than enough, the blob format
// is normally a mime plus some extras, again 64 should fit, a param id is
// a SHA-1 sum that uses 41 chars, the id is the sum of all the above plus
// connecting chars, 320 is again more than enough
// bytes is going to be less than a zettabyte(one million petabytes,
10^21) for the
// foreseeable future
....
protected static final int GRIDSET_ID_SIZE = 32; .....
protected final Map<String, List<String>> TABLE_CREATION_MAP =
new LinkedHashMap<String, List<String>>() {
{
put(
"TILESET",
Arrays.asList( //
"CREATE TABLE ${schema}TILESET (\n"
+ // ....
" GRIDSET_ID VARCHAR("
+ GRIDSET_ID_SIZE
+ "),\n"
.....
--
Sent from: http://osgeo-org.1560.x6.nabble.com/GeoServer-Dev-f3819232.html
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel