From 8c45fc41ecf9f104a053275c69545a4d602ccd96 Mon Sep 17 00:00:00 2001 From: Athou Date: Mon, 27 May 2013 12:16:37 +0200 Subject: [PATCH] requeue feed immediatly if an entry fails to update --- .../backend/feeds/FeedRefreshUpdater.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java b/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java index 28a075fd..3936c4e4 100644 --- a/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java +++ b/src/main/java/com/commafeed/backend/feeds/FeedRefreshUpdater.java @@ -69,7 +69,7 @@ public class FeedRefreshUpdater { locks = Striped.lazyWeakLock(threads); pool = new ThreadPoolExecutor(threads, threads, 0, TimeUnit.MILLISECONDS, - queue = new ArrayBlockingQueue(100 * threads)); + queue = new ArrayBlockingQueue(500 * threads)); pool.setRejectedExecutionHandler(new RejectedExecutionHandler() { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { @@ -111,35 +111,43 @@ public class FeedRefreshUpdater { @Override public void run() { + boolean ok = true; if (entries != null) { List subscriptions = feedSubscriptionDAO .findByFeed(feed); for (FeedEntry entry : entries) { - updateEntry(feed, entry, subscriptions); + ok &= updateEntry(feed, entry, subscriptions); } } if (applicationSettingsService.get().isPubsubhubbub()) { handlePubSub(feed); } + if (!ok) { + feed.setDisabledUntil(null); + } metricsBean.feedUpdated(); taskGiver.giveBack(feed); } } - private void updateEntry(final Feed feed, final FeedEntry entry, + private boolean updateEntry(final Feed feed, final FeedEntry entry, final List subscriptions) { Lock lock = locks.get(entry.getGuid()); + boolean locked = false; try { - lock.tryLock(1, TimeUnit.MINUTES); + locked = lock.tryLock(1, TimeUnit.MINUTES); feedUpdateService.updateEntry(feed, entry, subscriptions); } catch (InterruptedException e) { log.error("interrupted while waiting for lock for " + feed.getUrl() + " : " + e.getMessage(), e); } finally { - lock.unlock(); + if (locked) { + lock.unlock(); + } } + return locked; } private void handlePubSub(final Feed feed) {