delete old read statuses by chunks in order to avoid large transactions

This commit is contained in:
Athou
2013-09-17 12:55:27 +02:00
parent 587b25b18b
commit 136c41c6aa
2 changed files with 12 additions and 4 deletions

View File

@@ -290,9 +290,10 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
setTimeout(query, applicationSettingsService.get().getQueryTimeout()); setTimeout(query, applicationSettingsService.get().getQueryTimeout());
} }
public int deleteOldStatuses(Date olderThan) { public int deleteOldStatuses(Date olderThan, int limit) {
Query query = em.createNamedQuery("Statuses.deleteOld"); Query query = em.createNamedQuery("Statuses.deleteOld");
query.setParameter("date", olderThan); query.setParameter("date", olderThan);
query.setMaxResults(limit);
return query.executeUpdate(); return query.executeUpdate();
} }

View File

@@ -98,9 +98,16 @@ public class DatabaseCleaningService {
feedDAO.saveOrUpdate(into); feedDAO.saveOrUpdate(into);
} }
public void cleanStatusesOlderThan(Date olderThan) { public long cleanStatusesOlderThan(Date olderThan) {
log.info("cleaning old read statuses"); log.info("cleaning old read statuses");
int deleted = feedEntryStatusDAO.deleteOldStatuses(olderThan); long total = 0;
log.info("cleaned {} read statuses", deleted); 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;
} }
} }