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());
}
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();
}

View File

@@ -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;
}
}