From 0e3973c2a006b6b3333f538ecaff074e5cb0ce49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Prunayre?= Date: Wed, 14 Mar 2018 18:29:41 +0100 Subject: [PATCH] Fix spatial search not working with shapefile sometimes (#2516) * Spatial search not working when using ShapefileDataStore after a while. Disable usage of fix index. * Remove spatialindex folder created on startup which is never used. Spatial index is created on index folder next to Lucene one. --- .../kernel/GeonetworkDataDirectory.java | 21 ------------------- .../AbstractGeonetworkDataDirectoryTest.java | 2 -- .../fao/geonet/api/site/SiteInformation.java | 8 +------ .../fao/geonet/services/config/GetInfo.java | 5 ----- .../main/java/org/fao/geonet/Geonetwork.java | 4 ++++ 5 files changed, 5 insertions(+), 35 deletions(-) diff --git a/core/src/main/java/org/fao/geonet/kernel/GeonetworkDataDirectory.java b/core/src/main/java/org/fao/geonet/kernel/GeonetworkDataDirectory.java index a87c6f22419..e42f8afb41a 100644 --- a/core/src/main/java/org/fao/geonet/kernel/GeonetworkDataDirectory.java +++ b/core/src/main/java/org/fao/geonet/kernel/GeonetworkDataDirectory.java @@ -69,7 +69,6 @@ public class GeonetworkDataDirectory { private Path webappDir; private Path systemDataDir; private Path luceneDir; - private Path spatialIndexPath; private Path configDir; private Path thesauriDir; private Path schemaPluginsDir; @@ -292,8 +291,6 @@ private Path setDataDirectory(JeevesServlet jeevesServlet, String webappName, // Set subfolder data directory luceneDir = setDir(jeevesServlet, webappName, handlerConfig, luceneDir, ".lucene" + KEY_SUFFIX, Geonet.Config.LUCENE_DIR, "index"); - spatialIndexPath = setDir(jeevesServlet, "", handlerConfig, spatialIndexPath, "spatial" + KEY_SUFFIX, - null, "spatialindex"); configDir = setDir(jeevesServlet, webappName, handlerConfig, configDir, ".config" + KEY_SUFFIX, Geonet.Config.CONFIG_DIR, "config"); @@ -531,24 +528,6 @@ public void setLuceneDir(Path luceneDir) { this.luceneDir = luceneDir; } - /** - * Get the directory to store the metadata spatial index. If the spatial index is to be stored - * locally this is the directory to use. - * - * @return the directory to store the metadata spatial index - */ - public Path getSpatialIndexPath() { - return spatialIndexPath; - } - - /** - * Set the directory to store the metadata spatial index. If the spatial index is to be stored - * locally this is the directory to use. - */ - public void setSpatialIndexPath(Path spatialIndexPath) { - this.spatialIndexPath = spatialIndexPath; - } - /** * Return the directory containing the configuration file. * diff --git a/core/src/test/java/org/fao/geonet/kernel/AbstractGeonetworkDataDirectoryTest.java b/core/src/test/java/org/fao/geonet/kernel/AbstractGeonetworkDataDirectoryTest.java index 42154c40279..6c6ed244a9f 100644 --- a/core/src/test/java/org/fao/geonet/kernel/AbstractGeonetworkDataDirectoryTest.java +++ b/core/src/test/java/org/fao/geonet/kernel/AbstractGeonetworkDataDirectoryTest.java @@ -58,7 +58,6 @@ public void testInit() throws Exception { dataDirectory.setSystemDataDir(null); dataDirectory.setConfigDir(null); dataDirectory.setLuceneDir(null); - dataDirectory.setSpatialIndexPath(null); dataDirectory.setMetadataDataDir(null); dataDirectory.setMetadataRevisionDir(null); dataDirectory.setResourcesDir(null); @@ -81,7 +80,6 @@ private void assertSystemDirSubFolders(Path expectedDataDir) { final Path expectedConfigDir = expectedDataDir.resolve("config"); assertEquals(expectedConfigDir, dataDirectory.getConfigDir()); assertEquals(expectedDataDir.resolve("index"), dataDirectory.getLuceneDir()); - assertEquals(expectedDataDir.resolve("spatialindex"), dataDirectory.getSpatialIndexPath()); assertEquals(expectedDataDir.resolve("data").resolve("metadata_data"), dataDirectory.getMetadataDataDir()); assertEquals(expectedDataDir.resolve("data").resolve("metadata_subversion"), dataDirectory.getMetadataRevisionDir()); final Path expectedResourcesDir = expectedDataDir.resolve("data").resolve("resources"); diff --git a/services/src/main/java/org/fao/geonet/api/site/SiteInformation.java b/services/src/main/java/org/fao/geonet/api/site/SiteInformation.java index c8b67ec285a..5bf64d28acc 100644 --- a/services/src/main/java/org/fao/geonet/api/site/SiteInformation.java +++ b/services/src/main/java/org/fao/geonet/api/site/SiteInformation.java @@ -173,17 +173,11 @@ private void loadIndexInfo(ServiceContext context) throws IOException { final GeonetworkDataDirectory dataDirectory = context.getBean(GeonetworkDataDirectory.class); Path luceneDir = dataDirectory.getLuceneDir(); indexProperties.put("index.path", luceneDir.toAbsolutePath().normalize().toString()); - Path lDir = dataDirectory.getSpatialIndexPath(); if (Files.exists(luceneDir)) { long size = ApiUtils.sizeOfDirectory(luceneDir); indexProperties.put("index.size", "" + size); // lucene + Shapefile // if exist } - - if (Files.exists(lDir)) { - long size = ApiUtils.sizeOfDirectory(lDir); - indexProperties.put("index.size.lucene", "" + size); - } indexProperties.put("index.lucene.config", context.getBean(LuceneConfig.class).toString()); } @@ -239,6 +233,6 @@ private void loadVersionInfo(ServiceContext context) { } catch (Exception ex) { ex.printStackTrace(); - } + } } } diff --git a/services/src/main/java/org/fao/geonet/services/config/GetInfo.java b/services/src/main/java/org/fao/geonet/services/config/GetInfo.java index aba8389a0a3..cd84624ae0c 100644 --- a/services/src/main/java/org/fao/geonet/services/config/GetInfo.java +++ b/services/src/main/java/org/fao/geonet/services/config/GetInfo.java @@ -155,17 +155,12 @@ private void loadIndexInfo(ServiceContext context) throws IOException { final GeonetworkDataDirectory dataDirectory = context.getBean(GeonetworkDataDirectory.class); Path luceneDir = dataDirectory.getLuceneDir(); indexProperties.put("index.path", luceneDir.toAbsolutePath().normalize().toString()); - Path lDir = dataDirectory.getSpatialIndexPath(); if (Files.exists(luceneDir)) { long size = sizeOfDirectory(luceneDir) / 1024; indexProperties.put("index.size", "" + size); // lucene + Shapefile // if exist } - if (Files.exists(lDir)) { - long size = sizeOfDirectory(lDir) / 1024; - indexProperties.put("index.size.lucene", "" + size); - } indexProperties.put("index.lucene.config", context.getBean(LuceneConfig.class).toString()); } diff --git a/web/src/main/java/org/fao/geonet/Geonetwork.java b/web/src/main/java/org/fao/geonet/Geonetwork.java index f8027a67730..04036d6e0eb 100644 --- a/web/src/main/java/org/fao/geonet/Geonetwork.java +++ b/web/src/main/java/org/fao/geonet/Geonetwork.java @@ -642,6 +642,10 @@ private DataStore createShapefileDatastore(String indexDir) throws Exception { logger.info("Using shapefile " + file.getAbsolutePath()); } ShapefileDataStore ids = new ShapefileDataStore(file.toURI().toURL()); + // It looks like we're facing this issue + // https://osgeo-org.atlassian.net/browse/GEOT-5830 + // And spatial search does not return any results. + ids.setFidIndexed(false); ids.setNamespaceURI("http://geonetwork.org"); ids.setMemoryMapped(false); ids.setCharset(Charset.forName(Constants.ENCODING));