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