forked from Archives/Athou_commafeed
delete old read statuses by chunks in order to avoid large transactions
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user