Skip to content

Commit f37afa8

Browse files
authored
Fixed listEvents intermittent exception: (#9661)
com.mysql.cj.jdbc.ClientPreparedStatement: SELECT event_view.id, event_view.uuid, event_view.type, event_view.state, event_view.description, event_view.created, event_view.user_id, event_view.user_name, event_view.level, event_view.start_id, event_view.start_uuid, event_view.parameters, event_view.account_id, event_view.account_uuid, event_view.account_name, event_view.account_type, event_view.domain_id, event_view.domain_uuid, event_view.domain_name, event_view.domain_path, event_view.resource_id, event_view.resource_type, event_view.project_id, event_view.project_uuid, event_view.project_name, event_view.archived, event_view.display FROM event_view WHERE event_view.id IN )
1 parent a88967b commit f37afa8

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

server/src/main/java/com/cloud/api/query/QueryManagerImpl.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -818,8 +818,14 @@ private Pair<List<EventJoinVO>, Integer> searchForEventsInternal(ListEventsCmd c
818818
Integer count = eventIdPage.second();
819819
Long[] idArray = eventIdPage.first().toArray(new Long[0]);
820820

821-
if (count == 0) {
822-
return new Pair<>(new ArrayList<>(), count);
821+
/**
822+
* Need to check array empty, because {@link com.cloud.utils.db.GenericDaoBase#searchAndCount(SearchCriteria, Filter, boolean)}
823+
* makes two calls: first to get objects and second to get count.
824+
* List events has start date filter, there is highly possible cause where no objects loaded
825+
* and next millisecond new event added and finally we ended up with count = 1 and no ids.
826+
*/
827+
if (count == 0 || idArray.length < 1) {
828+
count = 0;
823829
}
824830

825831
List<EventJoinVO> events = _eventJoinDao.searchByIds(idArray);

server/src/main/java/com/cloud/event/dao/EventJoinDaoImpl.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@ public EventResponse newEventResponse(EventJoinVO event) {
131131

132132
@Override
133133
public List<EventJoinVO> searchByIds(Long... ids) {
134+
// return empty collection if there are no ids.
135+
if (ids.length == 0) {
136+
return List.of();
137+
}
134138
SearchCriteria<EventJoinVO> sc = vrSearch.create();
135139
sc.setParameters("idIN", ids);
136140
return searchIncludingRemoved(sc, null, null, false);

0 commit comments

Comments
 (0)