in encryption/src/main/java/org/apache/solr/update/DirectUpdateHandler2Copy.java [434:469]
private void addAndDelete(AddUpdateCommand cmd, List<UpdateLog.DBQ> deletesAfter)
throws IOException {
// this logic is different enough from doNormalUpdate that it's separate
log.info("Reordered DBQs detected. Update={} DBQs={}", cmd, deletesAfter);
List<Query> dbqList = new ArrayList<>(deletesAfter.size());
for (UpdateLog.DBQ dbq : deletesAfter) {
try {
DeleteUpdateCommand tmpDel = new DeleteUpdateCommand(cmd.req);
tmpDel.query = dbq.q;
tmpDel.version = -dbq.version;
dbqList.add(getQuery(tmpDel));
} catch (Exception e) {
log.error("Exception parsing reordered query : {}", dbq, e);
}
}
RefCounted<IndexWriter> iw = solrCoreState.getIndexWriter(core);
try {
IndexWriter writer = iw.get();
// see comment in deleteByQuery
synchronized (solrCoreState.getUpdateLock()) {
updateDocOrDocValues(cmd, writer);
if (cmd.isInPlaceUpdate() && ulog != null) {
ulog.openRealtimeSearcher(); // This is needed due to LUCENE-7344.
}
for (Query q : dbqList) {
writer.deleteDocuments(new DeleteByQueryWrapper(q, core.getLatestSchema()));
}
if (ulog != null) ulog.add(cmd, true); // this needs to be protected by update lock
}
} finally {
iw.decref();
}
}