Author: ssmiweve
Date: 2008-12-01 14:35:40 +0100 (Mon, 01 Dec 2008)
New Revision: 7006

Modified:
   
branches/2.18/war/src/main/java/no/sesat/search/http/filters/SiteLocatorFilter.java
Log:
Issue SKER4321:  (Load reducing filter that handles only current and last 
request from client) 
 use a bigger safety net. we must _always_ remove request from queue and unlock

Modified: 
branches/2.18/war/src/main/java/no/sesat/search/http/filters/SiteLocatorFilter.java
===================================================================
--- 
branches/2.18/war/src/main/java/no/sesat/search/http/filters/SiteLocatorFilter.java
 2008-12-01 13:06:26 UTC (rev 7005)
+++ 
branches/2.18/war/src/main/java/no/sesat/search/http/filters/SiteLocatorFilter.java
 2008-12-01 13:35:40 UTC (rev 7006)
@@ -33,11 +33,8 @@
 import java.util.UUID;
 import java.text.MessageFormat;
 import java.util.Deque;
-import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingDeque;
-import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingDeque;
-import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
@@ -430,35 +427,36 @@
         // deque has a time limit. start counting.
         long timeLeft = WAIT_TIME;
 
-        // attempt to join deque
-        if (deque.offerFirst(request)) {
-            timeLeft = tryLock(request, deque, lock, timeLeft);
-        }
+        try{
+            // attempt to join deque
+            if (deque.offerFirst(request)) {
+                timeLeft = tryLock(request, deque, lock, timeLeft);
+            }
 
-        if(lock.isHeldByCurrentThread()){
+            if(lock.isHeldByCurrentThread()){
 
-            try{
                 // waiting is over. and we can execute
                 chain.doFilter(request, response);
 
-            }finally{
-                // take out of deque first
-                deque.remove(request);
+            }else{
+                // we failed to execute. return 409 response.
+                if (response instanceof HttpServletResponse) {
 
-                // release the lock, waiting up the next request
-                lock.unlock();
+                    LOG.warn(" -- response 409 " +
+                            (0 < timeLeft
+                            ? "(More then " + REQUEST_QUEUE_SIZE + " requests 
already in queue)"
+                            : "(Timeout: Waited " + WAIT_TIME + " ms)"));
+
+                    response.sendError(HttpServletResponse.SC_CONFLICT);
+                }
             }
-        }else{
-            // we failed to execute. return 409 response.
-            if (response instanceof HttpServletResponse) {
+        }finally{
 
-                LOG.warn(" -- response 409 " +
-                        (0 < timeLeft
-                        ? "(More then " + REQUEST_QUEUE_SIZE + " requests 
already in queue)"
-                        : "(Timeout: Waited " + WAIT_TIME + " ms)"));
+            // take out of deque first
+            deque.remove(request);
 
-                response.sendError(HttpServletResponse.SC_CONFLICT);
-            }
+            // release the lock, waiting up the next request
+            if(lock.isHeldByCurrentThread()){ lock.unlock(); }
         }
     }
 

_______________________________________________
Kernel-commits mailing list
Kernel-commits@sesat.no
http://sesat.no/mailman/listinfo/kernel-commits

Reply via email to