|
From: <mol...@us...> - 2010-06-10 11:24:19
|
Revision: 2638
http://openutils.svn.sourceforge.net/openutils/?rev=2638&view=rev
Author: molaschi
Date: 2010-06-10 11:24:11 +0000 (Thu, 10 Jun 2010)
Log Message:
-----------
[CACHE-1] replaced lock between getting cache content and flushing by disabling cache while flushing
Modified Paths:
--------------
trunk/openutils-mgnlcache/src/main/java/net/sourceforge/openutils/mgnlsimplecache/filesystem/FSCacheManager.java
trunk/openutils-mgnlcache/src/main/java/net/sourceforge/openutils/mgnlsimplecache/filters/CacheFilter.java
trunk/openutils-mgnlcache/src/main/java/net/sourceforge/openutils/mgnlsimplecache/managers/CacheManager.java
Modified: trunk/openutils-mgnlcache/src/main/java/net/sourceforge/openutils/mgnlsimplecache/filesystem/FSCacheManager.java
===================================================================
--- trunk/openutils-mgnlcache/src/main/java/net/sourceforge/openutils/mgnlsimplecache/filesystem/FSCacheManager.java 2010-06-09 17:14:21 UTC (rev 2637)
+++ trunk/openutils-mgnlcache/src/main/java/net/sourceforge/openutils/mgnlsimplecache/filesystem/FSCacheManager.java 2010-06-10 11:24:11 UTC (rev 2638)
@@ -68,8 +68,6 @@
private String basePath = "fscache";
- private Object lock = new Object();
-
private boolean flushOnStop = false;
private boolean reloadAtStartup;
@@ -82,6 +80,8 @@
private Voter gzipVoter;
+ private volatile boolean active = true;
+
/**
* Logger.
*/
@@ -321,27 +321,23 @@
boolean gzipable = gzipVoter != null && gzipVoter.vote(request) > 0;
- synchronized (lock)
+ boolean miss = !contents.containsKey(getKey(request));
+ if (miss)
{
+ cacheMisses++;
+ }
+ else
+ {
+ cacheHits++;
+ }
- boolean miss = !contents.containsKey(getKey(request));
- if (miss)
- {
- cacheMisses++;
- }
- else
- {
- cacheHits++;
- }
-
- if (miss)
- {
- String fileName = getCacheDir() + getKey(request);
- contents.put(getKey(request), FSCachedItem.createNew(fileName, gzipable));
- cachePuts++;
- }
- return contents.get(getKey(request));
+ if (miss)
+ {
+ String fileName = getCacheDir() + getKey(request);
+ contents.put(getKey(request), FSCachedItem.createNew(fileName, gzipable));
+ cachePuts++;
}
+ return contents.get(getKey(request));
}
/**
@@ -452,7 +448,9 @@
*/
public void flush()
{
- synchronized (lock)
+ active = false;
+
+ try
{
// wait that every rw operation finished
for (String key : contents.keySet())
@@ -471,6 +469,18 @@
cacheDir.delete();
}
}
+ finally
+ {
+ active = true;
+ }
}
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isActive()
+ {
+ return active;
+ }
+
}
Modified: trunk/openutils-mgnlcache/src/main/java/net/sourceforge/openutils/mgnlsimplecache/filters/CacheFilter.java
===================================================================
--- trunk/openutils-mgnlcache/src/main/java/net/sourceforge/openutils/mgnlsimplecache/filters/CacheFilter.java 2010-06-09 17:14:21 UTC (rev 2637)
+++ trunk/openutils-mgnlcache/src/main/java/net/sourceforge/openutils/mgnlsimplecache/filters/CacheFilter.java 2010-06-10 11:24:11 UTC (rev 2638)
@@ -120,7 +120,7 @@
throws IOException, ServletException
{
// null check for broken configurations, needed
- if (cacheManager != null)
+ if (cacheManager != null && cacheManager.isActive())
{
doFilterForContent(request, response, chain);
}
Modified: trunk/openutils-mgnlcache/src/main/java/net/sourceforge/openutils/mgnlsimplecache/managers/CacheManager.java
===================================================================
--- trunk/openutils-mgnlcache/src/main/java/net/sourceforge/openutils/mgnlsimplecache/managers/CacheManager.java 2010-06-09 17:14:21 UTC (rev 2637)
+++ trunk/openutils-mgnlcache/src/main/java/net/sourceforge/openutils/mgnlsimplecache/managers/CacheManager.java 2010-06-10 11:24:11 UTC (rev 2638)
@@ -41,4 +41,6 @@
void start();
void stop();
+
+ boolean isActive();
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|