in encryption/src/main/java/org/apache/solr/encryption/EncryptionDirectory.java [315:342]
public List<SegmentCommitInfo> getSegmentsWithOldKeyId(SegmentInfos segmentInfos, String activeKeyId)
throws IOException {
List<SegmentCommitInfo> segmentsWithOldKeyId = null;
if (log.isDebugEnabled()) {
log.debug("reading segments {} for key ids different from {}",
segmentInfos.asList().stream().map(i -> i.info.name).collect(Collectors.toList()),
activeKeyId);
}
for (SegmentCommitInfo segmentCommitInfo : segmentInfos) {
for (String fileName : segmentCommitInfo.files()) {
if (keyManager.isEncryptable(fileName)) {
try (IndexInput fileInput = in.openInput(fileName, IOContext.READ)) {
String keyRef = getKeyRefForReading(fileInput);
String keyId = keyRef == null ? null : getKeyIdFromCommit(keyRef, segmentInfos.getUserData());
log.debug("reading file {} of segment {} => keyId={}", fileName, segmentCommitInfo.info.name, keyId);
if (!Objects.equals(keyId, activeKeyId)) {
if (segmentsWithOldKeyId == null) {
segmentsWithOldKeyId = new ArrayList<>();
}
segmentsWithOldKeyId.add(segmentCommitInfo);
}
}
break;
}
}
}
return segmentsWithOldKeyId == null ? Collections.emptyList() : segmentsWithOldKeyId;
}