diff --git a/src/main/java/com/commafeed/backend/DatabaseCleaner.java b/src/main/java/com/commafeed/backend/DatabaseCleaner.java index 8de562c0..5bc07dd5 100644 --- a/src/main/java/com/commafeed/backend/DatabaseCleaner.java +++ b/src/main/java/com/commafeed/backend/DatabaseCleaner.java @@ -40,6 +40,19 @@ public class DatabaseCleaner { log.info("cleanup done: {} feeds without subscriptions deleted", total); return total; } + + public long cleanEntriesWithoutFeeds() { + + long total = 0; + int deleted = -1; + do { + deleted = feedEntryDAO.deleteWithoutFeeds(100); + total += deleted; + log.info("removed {} entries without feeds", total); + } while (deleted != 0); + log.info("cleanup done: {} entries without feeds deleted", total); + return total; + } public long cleanEntriesOlderThan(long value, TimeUnit unit) { Calendar cal = Calendar.getInstance(); diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java index eda72784..8584e381 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryDAO.java @@ -7,6 +7,7 @@ import javax.ejb.Stateless; import javax.inject.Inject; import javax.persistence.TypedQuery; import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.JoinType; import javax.persistence.criteria.Root; import javax.persistence.criteria.SetJoin; @@ -88,4 +89,20 @@ public class FeedEntryDAO extends GenericDAO { delete(list); return deleted; } + + public int deleteWithoutFeeds(int max) { + CriteriaQuery query = builder.createQuery(getType()); + Root root = query.from(getType()); + + SetJoin join = root.join(FeedEntry_.feeds, + JoinType.LEFT); + query.where(builder.isNull(join.get(Feed_.id))); + TypedQuery q = em.createQuery(query); + q.setMaxResults(max); + + List list = q.getResultList(); + int deleted = list.size(); + delete(list); + return deleted; + } } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java index a3c34b27..d12929b7 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java @@ -249,6 +249,8 @@ public class AdminREST extends AbstractResourceREST { Map map = Maps.newHashMap(); map.put("feeds_without_subscriptions", cleaner.cleanFeedsWithoutSubscriptions()); + map.put("entries_without_feeds", + cleaner.cleanEntriesWithoutFeeds()); return Response.ok(map).build(); }