forked from Archives/Athou_commafeed
batch delete entries too
This commit is contained in:
@@ -41,6 +41,7 @@ public class ScheduledTasks {
|
|||||||
*/
|
*/
|
||||||
@Schedule(hour = "*", persistent = false)
|
@Schedule(hour = "*", persistent = false)
|
||||||
private void cleanFeedsAndContents() {
|
private void cleanFeedsAndContents() {
|
||||||
|
cleaner.cleanEntriesForFeedsWithoutSubscriptions();
|
||||||
cleaner.cleanFeedsWithoutSubscriptions();
|
cleaner.cleanFeedsWithoutSubscriptions();
|
||||||
cleaner.cleanContentsWithoutEntries();
|
cleaner.cleanContentsWithoutEntries();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,8 +95,8 @@ public class FeedDAO extends GenericDAO<Feed> {
|
|||||||
public List<Feed> findByTopic(String topic) {
|
public List<Feed> findByTopic(String topic) {
|
||||||
return findByField(Feed_.pushTopicHash, DigestUtils.sha1Hex(topic));
|
return findByField(Feed_.pushTopicHash, DigestUtils.sha1Hex(topic));
|
||||||
}
|
}
|
||||||
|
|
||||||
public int deleteWithoutSubscriptions(int max) {
|
public List<Feed> findWithoutSubscriptions(int max) {
|
||||||
CriteriaQuery<Feed> query = builder.createQuery(getType());
|
CriteriaQuery<Feed> query = builder.createQuery(getType());
|
||||||
Root<Feed> root = query.from(getType());
|
Root<Feed> root = query.from(getType());
|
||||||
|
|
||||||
@@ -105,11 +105,7 @@ public class FeedDAO extends GenericDAO<Feed> {
|
|||||||
TypedQuery<Feed> q = em.createQuery(query);
|
TypedQuery<Feed> q = em.createQuery(query);
|
||||||
q.setMaxResults(max);
|
q.setMaxResults(max);
|
||||||
|
|
||||||
List<Feed> list = q.getResultList();
|
return q.getResultList();
|
||||||
int deleted = list.size();
|
|
||||||
delete(list);
|
|
||||||
return deleted;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static enum DuplicateMode {
|
public static enum DuplicateMode {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import javax.persistence.criteria.Root;
|
|||||||
|
|
||||||
import org.apache.commons.codec.digest.DigestUtils;
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
|
|
||||||
|
import com.commafeed.backend.model.Feed;
|
||||||
import com.commafeed.backend.model.FeedEntry;
|
import com.commafeed.backend.model.FeedEntry;
|
||||||
import com.commafeed.backend.model.FeedEntry_;
|
import com.commafeed.backend.model.FeedEntry_;
|
||||||
import com.commafeed.backend.model.Feed_;
|
import com.commafeed.backend.model.Feed_;
|
||||||
@@ -36,6 +37,21 @@ public class FeedEntryDAO extends GenericDAO<FeedEntry> {
|
|||||||
return Iterables.getFirst(list, null);
|
return Iterables.getFirst(list, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int delete(Feed feed, int max) {
|
||||||
|
|
||||||
|
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
|
||||||
|
Root<FeedEntry> root = query.from(getType());
|
||||||
|
|
||||||
|
query.where(builder.equal(root.get(FeedEntry_.feed), feed));
|
||||||
|
TypedQuery<FeedEntry> q = em.createQuery(query);
|
||||||
|
q.setMaxResults(max);
|
||||||
|
|
||||||
|
List<FeedEntry> list = q.getResultList();
|
||||||
|
int deleted = list.size();
|
||||||
|
delete(list);
|
||||||
|
return deleted;
|
||||||
|
}
|
||||||
|
|
||||||
public int delete(Date olderThan, int max) {
|
public int delete(Date olderThan, int max) {
|
||||||
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
|
CriteriaQuery<FeedEntry> query = builder.createQuery(getType());
|
||||||
Root<FeedEntry> root = query.from(getType());
|
Root<FeedEntry> root = query.from(getType());
|
||||||
|
|||||||
@@ -63,10 +63,11 @@ public abstract class GenericDAO<T extends AbstractModel> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void delete(Collection<? extends AbstractModel> objects) {
|
public int delete(Collection<? extends AbstractModel> objects) {
|
||||||
for (AbstractModel object : objects) {
|
for (AbstractModel object : objects) {
|
||||||
delete(object);
|
delete(object);
|
||||||
}
|
}
|
||||||
|
return objects.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteById(Long id) {
|
public void deleteById(Long id) {
|
||||||
|
|||||||
@@ -44,12 +44,29 @@ public class DatabaseCleaningService {
|
|||||||
@Inject
|
@Inject
|
||||||
ApplicationSettingsService applicationSettingsService;
|
ApplicationSettingsService applicationSettingsService;
|
||||||
|
|
||||||
|
public long cleanEntriesForFeedsWithoutSubscriptions() {
|
||||||
|
log.info("cleaning entries for feeds without subscriptions");
|
||||||
|
long total = 0;
|
||||||
|
int deleted = 0;
|
||||||
|
do {
|
||||||
|
deleted = 0;
|
||||||
|
List<Feed> feeds = feedDAO.findWithoutSubscriptions(1);
|
||||||
|
for (Feed feed : feeds) {
|
||||||
|
deleted += feedEntryDAO.delete(feed, 10);
|
||||||
|
total += deleted;
|
||||||
|
log.info("removed {} entries for feeds without subscriptions", total);
|
||||||
|
}
|
||||||
|
} while (deleted != 0);
|
||||||
|
log.info("cleanup done: {} entries for feeds without subscriptions deleted", total);
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
|
||||||
public long cleanFeedsWithoutSubscriptions() {
|
public long cleanFeedsWithoutSubscriptions() {
|
||||||
log.info("cleaning feeds without subscriptions");
|
log.info("cleaning feeds without subscriptions");
|
||||||
long total = 0;
|
long total = 0;
|
||||||
int deleted = -1;
|
int deleted = 0;
|
||||||
do {
|
do {
|
||||||
deleted = feedDAO.deleteWithoutSubscriptions(1);
|
deleted = feedDAO.delete(feedDAO.findWithoutSubscriptions(10));
|
||||||
total += deleted;
|
total += deleted;
|
||||||
log.info("removed {} feeds without subscriptions", total);
|
log.info("removed {} feeds without subscriptions", total);
|
||||||
} while (deleted != 0);
|
} while (deleted != 0);
|
||||||
@@ -60,7 +77,7 @@ public class DatabaseCleaningService {
|
|||||||
public long cleanContentsWithoutEntries() {
|
public long cleanContentsWithoutEntries() {
|
||||||
log.info("cleaning contents without entries");
|
log.info("cleaning contents without entries");
|
||||||
long total = 0;
|
long total = 0;
|
||||||
int deleted = -1;
|
int deleted = 0;
|
||||||
do {
|
do {
|
||||||
deleted = feedEntryContentDAO.deleteWithoutEntries(10);
|
deleted = feedEntryContentDAO.deleteWithoutEntries(10);
|
||||||
total += deleted;
|
total += deleted;
|
||||||
@@ -75,7 +92,7 @@ public class DatabaseCleaningService {
|
|||||||
cal.add(Calendar.MINUTE, -1 * (int) unit.toMinutes(value));
|
cal.add(Calendar.MINUTE, -1 * (int) unit.toMinutes(value));
|
||||||
|
|
||||||
long total = 0;
|
long total = 0;
|
||||||
int deleted = -1;
|
int deleted = 0;
|
||||||
do {
|
do {
|
||||||
deleted = feedEntryDAO.delete(cal.getTime(), 100);
|
deleted = feedEntryDAO.delete(cal.getTime(), 100);
|
||||||
total += deleted;
|
total += deleted;
|
||||||
|
|||||||
Reference in New Issue
Block a user