From db32c0568997b738a49d9e6a3f54de5e121219f2 Mon Sep 17 00:00:00 2001 From: Athou Date: Mon, 27 May 2013 10:44:43 +0200 Subject: [PATCH] use guava for lock handling --- pom.xml | 15 ----------- .../backend/feeds/FeedRefreshUpdater.java | 25 +++++++++---------- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/pom.xml b/pom.xml index 51a6d554..3e9168bc 100644 --- a/pom.xml +++ b/pom.xml @@ -31,16 +31,6 @@ true - - jklm.releases - http://mvn.jkeylockmanager.de - - true - - - false - - @@ -244,11 +234,6 @@ joda-time 2.2 - - de.jkeylockmanager - jkeylockmanager - 1.0.0 - net.java.dev.rome diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java index c47ec935..b7da4e45 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java @@ -6,6 +6,7 @@ import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Lock; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -26,10 +27,7 @@ import com.commafeed.backend.model.FeedSubscription; import com.commafeed.backend.pubsubhubbub.SubscriptionHandler; import com.commafeed.backend.services.ApplicationSettingsService; import com.commafeed.backend.services.FeedUpdateService; - -import de.jkeylockmanager.manager.KeyLockManager; -import de.jkeylockmanager.manager.KeyLockManagers; -import de.jkeylockmanager.manager.LockCallback; +import com.google.common.util.concurrent.Striped; @Singleton public class FeedRefreshUpdater { @@ -37,8 +35,6 @@ public class FeedRefreshUpdater { protected static Logger log = LoggerFactory .getLogger(FeedRefreshUpdater.class); - private static final KeyLockManager lockManager = KeyLockManagers.newLock(); - @Inject FeedUpdateService feedUpdateService; @@ -53,7 +49,7 @@ public class FeedRefreshUpdater { @Inject ApplicationSettingsService applicationSettingsService; - + @Inject MetricsBean metricsBean; @@ -61,12 +57,14 @@ public class FeedRefreshUpdater { FeedSubscriptionDAO feedSubscriptionDAO; private ThreadPoolExecutor pool; + private Striped locks; @PostConstruct public void init() { ApplicationSettings settings = applicationSettingsService.get(); int threads = Math.max(settings.getDatabaseUpdateThreads(), 1); log.info("Creating database pool with {} threads", threads); + locks = Striped.lock(threads); pool = new ThreadPoolExecutor(threads, threads, 0, TimeUnit.MILLISECONDS, new ArrayBlockingQueue( 100 * threads)); @@ -130,12 +128,13 @@ public class FeedRefreshUpdater { private void updateEntry(final Feed feed, final FeedEntry entry, final List subscriptions) { - lockManager.executeLocked(entry.getGuid(), new LockCallback() { - @Override - public void doInLock() throws Exception { - feedUpdateService.updateEntry(feed, entry, subscriptions); - } - }); + Lock lock = locks.get(entry.getGuid()); + lock.lock(); + try { + feedUpdateService.updateEntry(feed, entry, subscriptions); + } finally { + lock.unlock(); + } } private void handlePubSub(final Feed feed) {