From 97586cd2c8d0626bff0912a91bcdc70e1bc518c6 Mon Sep 17 00:00:00 2001 From: Athou Date: Sat, 16 Nov 2013 07:30:01 +0100 Subject: [PATCH] batch delete entries too --- .../com/commafeed/backend/ScheduledTasks.java | 1 + .../com/commafeed/backend/dao/FeedDAO.java | 10 +++----- .../commafeed/backend/dao/FeedEntryDAO.java | 16 ++++++++++++ .../com/commafeed/backend/dao/GenericDAO.java | 3 ++- .../services/DatabaseCleaningService.java | 25 ++++++++++++++++--- 5 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/commafeed/backend/ScheduledTasks.java b/src/main/java/com/commafeed/backend/ScheduledTasks.java index 072709f1..991a3908 100644 --- a/src/main/java/com/commafeed/backend/ScheduledTasks.java +++ b/src/main/java/com/commafeed/backend/ScheduledTasks.java @@ -41,6 +41,7 @@ public class ScheduledTasks { */ @Schedule(hour = "*", persistent = false) private void cleanFeedsAndContents() { + cleaner.cleanEntriesForFeedsWithoutSubscriptions(); cleaner.cleanFeedsWithoutSubscriptions(); cleaner.cleanContentsWithoutEntries(); } diff --git a/src/main/java/com/commafeed/backend/dao/FeedDAO.java b/src/main/java/com/commafeed/backend/dao/FeedDAO.java index 7de4312a..86b33f60 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedDAO.java @@ -95,8 +95,8 @@ public class FeedDAO extends GenericDAO { public List findByTopic(String topic) { return findByField(Feed_.pushTopicHash, DigestUtils.sha1Hex(topic)); } - - public int deleteWithoutSubscriptions(int max) { + + public List findWithoutSubscriptions(int max) { CriteriaQuery query = builder.createQuery(getType()); Root root = query.from(getType()); @@ -105,11 +105,7 @@ public class FeedDAO extends GenericDAO { TypedQuery q = em.createQuery(query); q.setMaxResults(max); - List list = q.getResultList(); - int deleted = list.size(); - delete(list); - return deleted; - + return q.getResultList(); } public static enum DuplicateMode { diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java index c87c7c8c..1411ab8e 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java @@ -11,6 +11,7 @@ import javax.persistence.criteria.Root; import org.apache.commons.codec.digest.DigestUtils; +import com.commafeed.backend.model.Feed; import com.commafeed.backend.model.FeedEntry; import com.commafeed.backend.model.FeedEntry_; import com.commafeed.backend.model.Feed_; @@ -36,6 +37,21 @@ public class FeedEntryDAO extends GenericDAO { return Iterables.getFirst(list, null); } + public int delete(Feed feed, int max) { + + CriteriaQuery query = builder.createQuery(getType()); + Root root = query.from(getType()); + + query.where(builder.equal(root.get(FeedEntry_.feed), feed)); + TypedQuery q = em.createQuery(query); + q.setMaxResults(max); + + List list = q.getResultList(); + int deleted = list.size(); + delete(list); + return deleted; + } + public int delete(Date olderThan, int max) { CriteriaQuery query = builder.createQuery(getType()); Root root = query.from(getType()); diff --git a/src/main/java/com/commafeed/backend/dao/GenericDAO.java b/src/main/java/com/commafeed/backend/dao/GenericDAO.java index 1354c0f7..51076386 100644 --- a/src/main/java/com/commafeed/backend/dao/GenericDAO.java +++ b/src/main/java/com/commafeed/backend/dao/GenericDAO.java @@ -63,10 +63,11 @@ public abstract class GenericDAO { } } - public void delete(Collection objects) { + public int delete(Collection objects) { for (AbstractModel object : objects) { delete(object); } + return objects.size(); } public void deleteById(Long id) { diff --git a/src/main/java/com/commafeed/backend/services/DatabaseCleaningService.java b/src/main/java/com/commafeed/backend/services/DatabaseCleaningService.java index 31e23791..f2401a0a 100644 --- a/src/main/java/com/commafeed/backend/services/DatabaseCleaningService.java +++ b/src/main/java/com/commafeed/backend/services/DatabaseCleaningService.java @@ -44,12 +44,29 @@ public class DatabaseCleaningService { @Inject ApplicationSettingsService applicationSettingsService; + public long cleanEntriesForFeedsWithoutSubscriptions() { + log.info("cleaning entries for feeds without subscriptions"); + long total = 0; + int deleted = 0; + do { + deleted = 0; + List feeds = feedDAO.findWithoutSubscriptions(1); + for (Feed feed : feeds) { + deleted += feedEntryDAO.delete(feed, 10); + total += deleted; + log.info("removed {} entries for feeds without subscriptions", total); + } + } while (deleted != 0); + log.info("cleanup done: {} entries for feeds without subscriptions deleted", total); + return total; + } + public long cleanFeedsWithoutSubscriptions() { log.info("cleaning feeds without subscriptions"); long total = 0; - int deleted = -1; + int deleted = 0; do { - deleted = feedDAO.deleteWithoutSubscriptions(1); + deleted = feedDAO.delete(feedDAO.findWithoutSubscriptions(10)); total += deleted; log.info("removed {} feeds without subscriptions", total); } while (deleted != 0); @@ -60,7 +77,7 @@ public class DatabaseCleaningService { public long cleanContentsWithoutEntries() { log.info("cleaning contents without entries"); long total = 0; - int deleted = -1; + int deleted = 0; do { deleted = feedEntryContentDAO.deleteWithoutEntries(10); total += deleted; @@ -75,7 +92,7 @@ public class DatabaseCleaningService { cal.add(Calendar.MINUTE, -1 * (int) unit.toMinutes(value)); long total = 0; - int deleted = -1; + int deleted = 0; do { deleted = feedEntryDAO.delete(cal.getTime(), 100); total += deleted;