From c4bb8da746ca9b1b7965c3f5c3e2a0c320254ad6 Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 18 Jun 2013 10:34:11 +0200 Subject: [PATCH] faster cleanup query --- .../commafeed/backend/DatabaseCleaner.java | 7 ++---- .../backend/dao/FeedEntryStatusDAO.java | 22 ++++--------------- .../frontend/rest/resources/AdminREST.java | 4 ++-- src/main/resources/META-INF/orm.xml | 4 ++++ 4 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/commafeed/backend/DatabaseCleaner.java b/src/main/java/com/commafeed/backend/DatabaseCleaner.java index 5a8c1046..f5dda910 100644 --- a/src/main/java/com/commafeed/backend/DatabaseCleaner.java +++ b/src/main/java/com/commafeed/backend/DatabaseCleaner.java @@ -12,14 +12,11 @@ public class DatabaseCleaner { @Inject FeedEntryStatusDAO feedEntryStatusDAO; - public void cleanOlderThan(long value, TimeUnit unit) { + public int cleanOlderThan(long value, TimeUnit unit) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.MINUTE, -1 * (int) unit.toMinutes(value)); - int deleted = -1; - do { - deleted = feedEntryStatusDAO.delete(cal.getTime(), 1000); - } while (deleted != 0); + return feedEntryStatusDAO.delete(cal.getTime()); } } diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java index 2ae4c13f..bbb1e769 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java @@ -307,24 +307,10 @@ public class FeedEntryStatusDAO extends GenericDAO { query.setHint("javax.persistence.query.timeout", 20000); } - public int delete(Date olderThan, int max) { - CriteriaQuery query = builder.createQuery(getType()); - Root root = query.from(getType()); - Join entryJoin = root - .join(FeedEntryStatus_.entry); - - Predicate p1 = builder.lessThan(entryJoin.get(FeedEntry_.inserted), - olderThan); - Predicate p2 = builder.isFalse(root.get(FeedEntryStatus_.starred)); - - query.where(p1, p2); - - TypedQuery q = em.createQuery(query); - q.setMaxResults(max); - - List list = q.getResultList(); - int deleted = list.size(); - delete(list); + public int delete(Date olderThan) { + Query query = em.createNamedQuery("EntryStatus.deleteOlderThan"); + query.setParameter("olderThan", olderThan); + int deleted = query.executeUpdate(); 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 eccff5e0..19071e25 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/AdminREST.java @@ -194,8 +194,8 @@ public class AdminREST extends AbstractResourceREST { @Path("/cleanup") @GET public Response cleanup() { - cleaner.cleanOlderThan(30, TimeUnit.DAYS); - return Response.ok("ok").build(); + int deleted = cleaner.cleanOlderThan(30, TimeUnit.DAYS); + return Response.ok("ok: " + deleted).build(); } } diff --git a/src/main/resources/META-INF/orm.xml b/src/main/resources/META-INF/orm.xml index 328169fc..6fe4f64e 100644 --- a/src/main/resources/META-INF/orm.xml +++ b/src/main/resources/META-INF/orm.xml @@ -9,4 +9,8 @@ select sub.id, count(s) from FeedEntryStatus s LEFT JOIN s.subscription sub where sub.user=:user and s.read=false group by sub.id + + delete from FeedEntryStatus s where s in (select s2 from FeedEntryStatus s2 where s2.starred = false and s2.entry.inserted < :olderThan) + + \ No newline at end of file