From 8f85637bb8f526e8a438c82eccbbd2aa21e4213e Mon Sep 17 00:00:00 2001 From: Athou Date: Wed, 31 Jul 2013 16:03:52 +0200 Subject: [PATCH] invalidate cache once per feed instead of once per entry --- .../backend/feeds/FeedRefreshUpdater.java | 21 ++++++++++++------- .../backend/services/FeedUpdateService.java | 5 +++-- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java index 59cd1549..ec1fd358 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java @@ -13,6 +13,7 @@ import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.time.DateUtils; import org.slf4j.Logger; @@ -120,9 +121,19 @@ public class FeedRefreshUpdater { log.debug("cache hit for {}", entry.getUrl()); metricsBean.entryCacheHit(); } + currentEntries.add(cacheKey); } cache.setLastEntries(feed, currentEntries); + + if (CollectionUtils.isNotEmpty(subscriptions)) { + List users = Lists.newArrayList(); + for (FeedSubscription sub : subscriptions) { + users.add(sub.getUser()); + } + cache.invalidateUnreadCount(subscriptions.toArray(new FeedSubscription[0])); + cache.invalidateUserRootCategory(users.toArray(new User[0])); + } } if (applicationSettingsService.get().isPubsubhubbub()) { @@ -163,14 +174,10 @@ public class FeedRefreshUpdater { locked1 = lock1.tryLock(1, TimeUnit.MINUTES); locked2 = lock2.tryLock(1, TimeUnit.MINUTES); if (locked1 && locked2) { - feedUpdateService.updateEntry(feed, entry); - List users = Lists.newArrayList(); - for (FeedSubscription sub : subscriptions) { - users.add(sub.getUser()); + boolean inserted = feedUpdateService.addEntry(feed, entry); + if (inserted) { + metricsBean.entryInserted(); } - cache.invalidateUnreadCount(subscriptions.toArray(new FeedSubscription[0])); - cache.invalidateUserRootCategory(users.toArray(new User[0])); - metricsBean.entryInserted(); success = true; } else { log.error("lock timeout for " + feed.getUrl() + " - " + key1); diff --git a/src/main/java/com/commafeed/backend/services/FeedUpdateService.java b/src/main/java/com/commafeed/backend/services/FeedUpdateService.java index e1cc0d4a..9c06b9a8 100644 --- a/src/main/java/com/commafeed/backend/services/FeedUpdateService.java +++ b/src/main/java/com/commafeed/backend/services/FeedUpdateService.java @@ -24,11 +24,11 @@ public class FeedUpdateService { /** * this is NOT thread-safe */ - public void updateEntry(Feed feed, FeedEntry entry) { + public boolean addEntry(Feed feed, FeedEntry entry) { Long existing = feedEntryDAO.findExisting(entry.getGuid(), feed.getId()); if (existing != null) { - return; + return false; } FeedEntryContent content = feedEntryContentService.findOrCreate(entry.getContent(), feed.getLink()); @@ -38,5 +38,6 @@ public class FeedUpdateService { entry.setFeed(feed); feedEntryDAO.saveOrUpdate(entry); + return true; } }