@Override public void run() { boolean ok = true; Feed feed = context.getFeed(); List<FeedEntry> entries = context.getEntries(); if (entries.isEmpty() == false) { List<String> lastEntries = cache.getLastEntries(feed); List<String> currentEntries = Lists.newArrayList(); List<FeedSubscription> subscriptions = null; for (FeedEntry entry : entries) { String cacheKey = cache.buildUniqueEntryKey(feed, entry); if (!lastEntries.contains(cacheKey)) { log.debug("cache miss for {}", entry.getUrl()); if (subscriptions == null) { subscriptions = feedSubscriptionDAO.findByFeed(feed); } ok &= addEntry(feed, entry, subscriptions); metricsBean.entryCacheMiss(); } else { log.debug("cache hit for {}", entry.getUrl()); metricsBean.entryCacheHit(); } currentEntries.add(cacheKey); } cache.setLastEntries(feed, currentEntries); } if (applicationSettingsService.get().isPubsubhubbub()) { handlePubSub(feed); } if (!ok) { // requeue asap feed.setDisabledUntil(new Date(0)); } metricsBean.feedUpdated(); taskGiver.giveBack(feed); }