Skip to content

Commit 8e2a726

Browse files
authored
noderoster: optimize event list query (#1206)
1 parent 3083bdc commit 8e2a726

File tree

1 file changed

+33
-19
lines changed

1 file changed

+33
-19
lines changed

server/plugins/noderoster/impl/src/main/java/com/walmartlabs/concord/server/plugins/noderoster/processor/AnsibleEventsProcessor.java

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -112,31 +112,45 @@ public List<AnsibleEvent> list(EventMarker marker, OffsetDateTime startTimestamp
112112
return txResult(tx -> {
113113
ProcessQueue pq = PROCESS_QUEUE.as("pq");
114114
ProcessEvents pe = PROCESS_EVENTS.as("pe");
115-
Field<String> username = tx.select(USERS.USERNAME).from(USERS).where(USERS.USER_ID.eq(pq.INITIATOR_ID)).asField();
116-
117115
Field<Object> eventData = function("jsonb_strip_nulls", Object.class, pe.EVENT_DATA);
118-
SelectConditionStep<Record9<UUID, Long, UUID, OffsetDateTime, OffsetDateTime, Object, String, UUID, UUID>> s = tx.select(
119-
pe.EVENT_ID,
120-
pe.EVENT_SEQ,
121-
pe.INSTANCE_ID,
122-
pe.INSTANCE_CREATED_AT,
123-
pe.EVENT_DATE,
124-
eventData,
125-
username,
126-
pq.INITIATOR_ID,
127-
pq.PROJECT_ID)
128-
.from(pe)
129-
.innerJoin(pq).on(pq.INSTANCE_ID.eq(pe.INSTANCE_ID).and(pq.CREATED_AT.eq(pe.INSTANCE_CREATED_AT)))
130-
.where(pe.EVENT_TYPE.eq("ANSIBLE")
131-
.and(pe.EVENT_SEQ.greaterThan(marker.eventSeq())));
116+
117+
SelectConditionStep<Record6<UUID, Long, UUID, OffsetDateTime, OffsetDateTime, Object>> selectEventsSubQuery =
118+
tx.select(pe.EVENT_ID,
119+
pe.EVENT_SEQ,
120+
pe.INSTANCE_ID,
121+
pe.INSTANCE_CREATED_AT,
122+
pe.EVENT_DATE,
123+
eventData.as("event_data"))
124+
.from(pe)
125+
.where(pe.EVENT_TYPE.eq("ANSIBLE"))
126+
.and(pe.EVENT_SEQ.greaterThan(marker.eventSeq()));
132127

133128
if (startTimestamp != null) {
134-
s.and(pe.INSTANCE_CREATED_AT.greaterOrEqual(startTimestamp));
129+
selectEventsSubQuery.and(pe.INSTANCE_CREATED_AT.greaterOrEqual(startTimestamp));
135130
}
136131

137-
return s.orderBy(pe.EVENT_SEQ)
132+
Table<Record6<UUID, Long, UUID, OffsetDateTime, OffsetDateTime, Object>> eventsAlias = selectEventsSubQuery
133+
.orderBy(pe.EVENT_SEQ)
138134
.limit(count)
139-
.fetch(this::toEntity);
135+
.asTable("events_batch");
136+
137+
SelectOnConditionStep<Record9<UUID, Long, UUID, OffsetDateTime, OffsetDateTime, Object, String, UUID, UUID>> s = tx.select(
138+
eventsAlias.field("event_id", UUID.class),
139+
eventsAlias.field("event_seq", Long.class),
140+
eventsAlias.field("instance_id", UUID.class),
141+
eventsAlias.field("instance_created_at", OffsetDateTime.class),
142+
eventsAlias.field("event_date", OffsetDateTime.class),
143+
eventsAlias.field("event_data", Object.class),
144+
USERS.USERNAME,
145+
pq.INITIATOR_ID,
146+
pq.PROJECT_ID
147+
)
148+
.from(eventsAlias)
149+
.leftOuterJoin(pq)
150+
.on(pq.INSTANCE_ID.eq(eventsAlias.field("instance_id", UUID.class)))
151+
.leftOuterJoin(USERS).on(USERS.USER_ID.eq(pq.INITIATOR_ID));
152+
153+
return s.fetch(this::toEntity);
140154
});
141155
}
142156

0 commit comments

Comments
 (0)