in src/main/java/com/ericsson/gerrit/plugins/highavailability/autoreindex/GroupReindexRunnable.java [71:121]
protected Optional<Timestamp> indexIfNeeded(GroupReference g, Timestamp sinceTs) {
try {
Optional<InternalGroup> internalGroup = groups.getGroup(g.getUUID());
if (internalGroup.isPresent()) {
InternalGroup group = internalGroup.get();
Timestamp groupCreationTs = group.getCreatedOn();
Repository allUsersRepo = repoManager.openRepository(allUsers);
List<AccountGroupByIdAudit> subGroupMembersAud =
groups.getSubgroupsAudit(allUsersRepo, g.getUUID());
Stream<Timestamp> groupIdAudAddedTs =
subGroupMembersAud.stream()
.map(AccountGroupByIdAudit::addedOn)
.filter(Objects::nonNull);
Stream<Timestamp> groupIdAudRemovedTs =
subGroupMembersAud.stream()
.map(AccountGroupByIdAudit::removedOn)
.filter(Optional<Timestamp>::isPresent)
.map(Optional<Timestamp>::get);
List<AccountGroupMemberAudit> groupMembersAud =
groups.getMembersAudit(allUsersRepo, g.getUUID());
Stream<Timestamp> groupMemberAudAddedTs =
groupMembersAud.stream().map(AccountGroupMemberAudit::addedOn).filter(Objects::nonNull);
Stream<Timestamp> groupMemberAudRemovedTs =
groupMembersAud.stream()
.map(AccountGroupMemberAudit::removedOn)
.filter(Optional<Timestamp>::isPresent)
.map(Optional<Timestamp>::get);
Optional<Timestamp> groupLastTs =
Streams.concat(
groupIdAudAddedTs,
groupIdAudRemovedTs,
groupMemberAudAddedTs,
groupMemberAudRemovedTs,
Stream.of(groupCreationTs))
.max(Comparator.naturalOrder());
if (groupLastTs.isPresent() && groupLastTs.get().after(sinceTs)) {
log.atInfo().log("Index %s/%s/%s", g.getUUID(), g.getName(), groupLastTs.get());
indexer.index(g.getUUID(), Operation.INDEX, Optional.empty());
return groupLastTs;
}
}
} catch (IOException | ConfigInvalidException e) {
log.atSevere().withCause(e).log("Reindex failed");
}
return Optional.empty();
}