From 136c41c6aa94eb2e839f5aadebdefaa55f3aaec3 Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 17 Sep 2013 12:55:27 +0200 Subject: [PATCH] delete old read statuses by chunks in order to avoid large transactions --- .../commafeed/backend/dao/FeedEntryStatusDAO.java | 3 ++- .../backend/services/DatabaseCleaningService.java | 13 ++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java index 12aa10e8..13cd48df 100644 --- a/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java +++ b/src/main/java/com/commafeed/backend/dao/FeedEntryStatusDAO.java @@ -290,9 +290,10 @@ public class FeedEntryStatusDAO extends GenericDAO { setTimeout(query, applicationSettingsService.get().getQueryTimeout()); } - public int deleteOldStatuses(Date olderThan) { + public int deleteOldStatuses(Date olderThan, int limit) { Query query = em.createNamedQuery("Statuses.deleteOld"); query.setParameter("date", olderThan); + query.setMaxResults(limit); return query.executeUpdate(); } diff --git a/src/main/java/com/commafeed/backend/services/DatabaseCleaningService.java b/src/main/java/com/commafeed/backend/services/DatabaseCleaningService.java index d26d497f..c09512e4 100644 --- a/src/main/java/com/commafeed/backend/services/DatabaseCleaningService.java +++ b/src/main/java/com/commafeed/backend/services/DatabaseCleaningService.java @@ -98,9 +98,16 @@ public class DatabaseCleaningService { feedDAO.saveOrUpdate(into); } - public void cleanStatusesOlderThan(Date olderThan) { + public long cleanStatusesOlderThan(Date olderThan) { log.info("cleaning old read statuses"); - int deleted = feedEntryStatusDAO.deleteOldStatuses(olderThan); - log.info("cleaned {} read statuses", deleted); + long total = 0; + int deleted = -1; + do { + deleted = feedEntryStatusDAO.deleteOldStatuses(olderThan, 100); + total += deleted; + log.info("cleaned {} old read statuses", total); + } while (deleted != 0); + log.info("cleanup done: {} old read statuses deleted", total); + return total; } }