winterhazel commented on code in PR #11443:
URL: https://github.com/apache/cloudstack/pull/11443#discussion_r3170268705
##########
engine/schema/src/main/java/com/cloud/event/dao/EventDaoImpl.java:
##########
@@ -33,83 +38,90 @@
@Component
public class EventDaoImpl extends GenericDaoBase<EventVO, Long> implements
EventDao {
- protected final SearchBuilder<EventVO> CompletedEventSearch;
+
protected final SearchBuilder<EventVO> ToArchiveOrDeleteEventSearch;
public EventDaoImpl() {
- CompletedEventSearch = createSearchBuilder();
- CompletedEventSearch.and("state",
CompletedEventSearch.entity().getState(), SearchCriteria.Op.EQ);
- CompletedEventSearch.and("startId",
CompletedEventSearch.entity().getStartId(), SearchCriteria.Op.EQ);
- CompletedEventSearch.and("archived",
CompletedEventSearch.entity().getArchived(), Op.EQ);
- CompletedEventSearch.done();
-
ToArchiveOrDeleteEventSearch = createSearchBuilder();
+ ToArchiveOrDeleteEventSearch.select("id", SearchCriteria.Func.NATIVE,
ToArchiveOrDeleteEventSearch.entity().getId());
ToArchiveOrDeleteEventSearch.and("id",
ToArchiveOrDeleteEventSearch.entity().getId(), Op.IN);
ToArchiveOrDeleteEventSearch.and("type",
ToArchiveOrDeleteEventSearch.entity().getType(), Op.EQ);
- ToArchiveOrDeleteEventSearch.and("accountIds",
ToArchiveOrDeleteEventSearch.entity().getAccountId(), Op.IN);
+ ToArchiveOrDeleteEventSearch.and("accountId",
ToArchiveOrDeleteEventSearch.entity().getAccountId(), Op.EQ);
+ ToArchiveOrDeleteEventSearch.and("domainIds",
ToArchiveOrDeleteEventSearch.entity().getDomainId(), Op.IN);
ToArchiveOrDeleteEventSearch.and("createdDateB",
ToArchiveOrDeleteEventSearch.entity().getCreateDate(), Op.BETWEEN);
ToArchiveOrDeleteEventSearch.and("createdDateL",
ToArchiveOrDeleteEventSearch.entity().getCreateDate(), Op.LTEQ);
+ ToArchiveOrDeleteEventSearch.and("createdDateLT",
ToArchiveOrDeleteEventSearch.entity().getCreateDate(), Op.LT);
ToArchiveOrDeleteEventSearch.and("archived",
ToArchiveOrDeleteEventSearch.entity().getArchived(), Op.EQ);
ToArchiveOrDeleteEventSearch.done();
}
- @Override
- public List<EventVO> searchAllEvents(SearchCriteria<EventVO> sc, Filter
filter) {
- return listIncludingRemovedBy(sc, filter);
- }
-
- @Override
- public List<EventVO> listOlderEvents(Date oldTime) {
- if (oldTime == null)
- return null;
- SearchCriteria<EventVO> sc = createSearchCriteria();
- sc.addAnd("createDate", SearchCriteria.Op.LT, oldTime);
- sc.addAnd("archived", SearchCriteria.Op.EQ, false);
- return listIncludingRemovedBy(sc, null);
- }
-
- @Override
- public EventVO findCompletedEvent(long startId) {
- SearchCriteria<EventVO> sc = CompletedEventSearch.create();
- sc.setParameters("state", State.Completed);
- sc.setParameters("startId", startId);
- sc.setParameters("archived", false);
- return findOneIncludingRemovedBy(sc);
- }
-
- @Override
- public List<EventVO> listToArchiveOrDeleteEvents(List<Long> ids, String
type, Date startDate, Date endDate, List<Long> accountIds) {
+ private SearchCriteria<EventVO> createEventSearchCriteria(List<Long> ids,
String type, Date startDate, Date endDate,
+ Date limitDate,
Long accountId, List<Long> domainIds) {
SearchCriteria<EventVO> sc = ToArchiveOrDeleteEventSearch.create();
- if (ids != null) {
- sc.setParameters("id", ids.toArray(new Object[ids.size()]));
+
+ if (CollectionUtils.isNotEmpty(ids)) {
+ sc.setParameters("id", ids.toArray(new Object[0]));
}
- if (type != null) {
- sc.setParameters("type", type);
+ if (CollectionUtils.isNotEmpty(domainIds)) {
+ sc.setParameters("domainIds", domainIds.toArray(new Object[0]));
}
if (startDate != null && endDate != null) {
sc.setParameters("createdDateB", startDate, endDate);
} else if (endDate != null) {
sc.setParameters("createdDateL", endDate);
}
- if (accountIds != null && !accountIds.isEmpty()) {
- sc.setParameters("accountIds", accountIds.toArray(new
Object[accountIds.size()]));
- }
+ sc.setParametersIfNotNull("accountId", accountId);
+ sc.setParametersIfNotNull("createdDateLT", limitDate);
+ sc.setParametersIfNotNull("type", type);
sc.setParameters("archived", false);
- return search(sc, null);
+
+ return sc;
}
@Override
- public void archiveEvents(List<EventVO> events) {
- if (events != null && !events.isEmpty()) {
- TransactionLegacy txn = TransactionLegacy.currentTxn();
- txn.start();
- for (EventVO event : events) {
- event = lockRow(event.getId(), true);
- event.setArchived(true);
- update(event.getId(), event);
- txn.commit();
+ public long archiveEvents(List<Long> ids, String type, Date startDate,
Date endDate, Long accountId, List<Long> domainIds,
+ long limitPerQuery) {
+ SearchCriteria<EventVO> sc = createEventSearchCriteria(ids, type,
startDate, endDate, null, accountId, domainIds);
+ Filter filter = null;
+ if (limitPerQuery > 0) {
+ filter = new Filter(limitPerQuery);
+ }
+
+ long archived;
+ long totalArchived = 0L;
+
+ do {
+ List<EventVO> events = search(sc, filter);
+ if (events.isEmpty()) {
+ break;
}
- txn.close();
+
+ archived = archiveEventsInternal(events);
+ totalArchived += archived;
+ } while (limitPerQuery > 0 && archived >= limitPerQuery);
Review Comment:
Ignoring the configuration and doing it in batches anyways will make having
a configuration weird. I think that we can just enable batch operations by
default instead.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]