From 5a1e2520fc9baa9db2e14f48cc7ed5f04f4d3be2 Mon Sep 17 00:00:00 2001 From: Lyn Elisa Goltz Date: Mon, 19 Dec 2022 09:13:09 +0100 Subject: [PATCH] #1157 (#8616) - configure OffHeap CacheManager explicitly, access statistics to retrive size --- .../container/CachedRasterDataContainer.java | 19 +++++- .../data/container/StatisticsRetrieval.java | 61 +++++++++++++++++++ 2 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 deegree-core/deegree-core-coverage/src/main/java/org/deegree/coverage/raster/data/container/StatisticsRetrieval.java diff --git a/deegree-core/deegree-core-coverage/src/main/java/org/deegree/coverage/raster/data/container/CachedRasterDataContainer.java b/deegree-core/deegree-core-coverage/src/main/java/org/deegree/coverage/raster/data/container/CachedRasterDataContainer.java index 54e8ce98366..0678da8d715 100644 --- a/deegree-core/deegree-core-coverage/src/main/java/org/deegree/coverage/raster/data/container/CachedRasterDataContainer.java +++ b/deegree-core/deegree-core-coverage/src/main/java/org/deegree/coverage/raster/data/container/CachedRasterDataContainer.java @@ -40,7 +40,10 @@ import org.deegree.coverage.raster.io.RasterDataReader; import org.ehcache.Cache; import org.ehcache.CacheManager; +import org.ehcache.config.builders.CacheConfigurationBuilder; import org.ehcache.config.builders.CacheManagerBuilder; +import org.ehcache.config.builders.ResourcePoolsBuilder; +import org.ehcache.config.units.MemoryUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,13 +68,21 @@ public class CachedRasterDataContainer implements RasterDataContainer, RasterDat private final static String CACHENAME = "CachedRasterDataContainer"; + private static final StatisticsRetrieval statsRetrievalService = new StatisticsRetrieval(); + static { try { // TODO: make cachename configurable // see ehcache.xml for CachedRasterDataContainer configuration - CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build(); + CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().using( + statsRetrievalService ).build(); cacheManager.init(); - cache = cacheManager.getCache( CACHENAME, String.class, RasterData.class ); + cache = cacheManager.createCache( CACHENAME, CacheConfigurationBuilder.newCacheConfigurationBuilder( + String.class, + RasterData.class, + ResourcePoolsBuilder.newResourcePoolsBuilder().offheap( + 1, + MemoryUnit.GB ) ) ); } catch ( Throwable e ) { LOG.error( e.getLocalizedMessage(), e ); } @@ -111,7 +122,9 @@ public synchronized RasterData getRasterData() { RasterData raster = reader.read(); cache.put( identifier, raster ); if ( LOG.isDebugEnabled() ) { - LOG.debug( "cache miss: " + this );// + "#mem: " + cache.getMemoryStoreSize() ); + long occupiedByteSize = statsRetrievalService.getStatisticsService().getCacheStatistics( + CACHENAME ).getTierStatistics().get( "OffHeap" ).getOccupiedByteSize(); + LOG.debug( "cache miss: " + this + " #mem: " + occupiedByteSize ); } return raster; } else { diff --git a/deegree-core/deegree-core-coverage/src/main/java/org/deegree/coverage/raster/data/container/StatisticsRetrieval.java b/deegree-core/deegree-core-coverage/src/main/java/org/deegree/coverage/raster/data/container/StatisticsRetrieval.java new file mode 100644 index 00000000000..ebecbe48b3e --- /dev/null +++ b/deegree-core/deegree-core-coverage/src/main/java/org/deegree/coverage/raster/data/container/StatisticsRetrieval.java @@ -0,0 +1,61 @@ +//$HeadURL$ +/*---------------------------------------------------------------------------- + This file is part of deegree, http://deegree.org/ + Copyright (C) 2001-2022 by: + Department of Geography, University of Bonn + and + lat/lon GmbH + + This library is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the Free + Software Foundation; either version 2.1 of the License, or (at your option) + any later version. + This library is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + details. + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact information: + + lat/lon GmbH + Aennchenstr. 19, 53177 Bonn + Germany + http://lat-lon.de/ + + Department of Geography, University of Bonn + Prof. Dr. Klaus Greve + Postfach 1147, 53001 Bonn + Germany + http://www.geographie.uni-bonn.de/deegree/ + + e-mail: info@deegree.org + ----------------------------------------------------------------------------*/ +package org.deegree.coverage.raster.data.container; + +import org.ehcache.core.spi.service.StatisticsService; +import org.ehcache.spi.service.Service; +import org.ehcache.spi.service.ServiceProvider; + +import static java.util.Objects.requireNonNull; + +public class StatisticsRetrieval implements Service { + + private StatisticsService statisticsService; + + @Override + public void start( ServiceProvider serviceProvider ) { + this.statisticsService = serviceProvider.getService( StatisticsService.class ); + } + + @Override + public void stop() { + this.statisticsService = null; + } + + public StatisticsService getStatisticsService() { + return requireNonNull( statisticsService ); + } +} \ No newline at end of file