Skip to content

Commit

Permalink
deegree#1157 (#8616) - configure OffHeap CacheManager explicitly, acc…
Browse files Browse the repository at this point in the history
…ess statistics to retrive size
  • Loading branch information
lgoltz authored and latlon-team committed Jan 12, 2023
1 parent 69eafc9 commit 5a1e252
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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 );
}
Expand Down Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Service> serviceProvider ) {
this.statisticsService = serviceProvider.getService( StatisticsService.class );
}

@Override
public void stop() {
this.statisticsService = null;
}

public StatisticsService getStatisticsService() {
return requireNonNull( statisticsService );
}
}

0 comments on commit 5a1e252

Please sign in to comment.