in crossdc-producer/src/main/java/org/apache/solr/update/processor/MirroringUpdateRequestProcessorFactory.java [206:256]
public UpdateRequestProcessor getInstance(final SolrQueryRequest req, final SolrQueryResponse rsp,
final UpdateRequestProcessor next) {
if (!enabled) {
return new NoOpUpdateRequestProcessor(next);
}
// if the class fails to initialize
if (mirroringHandler == null) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "mirroringHandler is null");
}
// Check if mirroring is disabled in request params, defaults to true
boolean doMirroring = req.getParams().getBool(SERVER_SHOULD_MIRROR, true);
boolean mirrorCommits = conf.getBool(MIRROR_COMMITS);
ExpandDbq expandDbq = ExpandDbq.getOrDefault(conf.get(EXPAND_DBQ), ExpandDbq.EXPAND);
final long maxMirroringBatchSizeBytes = conf.getInt(MAX_REQUEST_SIZE_BYTES);
Boolean indexUnmirrorableDocs = conf.getBool(INDEX_UNMIRRORABLE_DOCS);
ModifiableSolrParams mirroredParams = null;
if (doMirroring) {
// Get the collection name for the core so we can be explicit in the mirrored request
CoreDescriptor coreDesc = req.getCore().getCoreDescriptor();
String collection = coreDesc.getCollectionName();
if (collection == null) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Could not determine collection name for "
+ MirroringUpdateProcessor.class.getSimpleName() + ". Solr may not be running in cloud mode.");
}
mirroredParams = new ModifiableSolrParams(req.getParams());
mirroredParams.set("collection", collection);
// remove internal version parameter
mirroredParams.remove(CommonParams.VERSION_FIELD);
// remove fields added by distributed update proc
mirroredParams.remove(DISTRIB_UPDATE_PARAM);
mirroredParams.remove(DISTRIB_FROM_COLLECTION);
mirroredParams.remove(DISTRIB_INPLACE_PREVVERSION);
mirroredParams.remove(COMMIT_END_POINT);
mirroredParams.remove(DISTRIB_FROM_SHARD);
mirroredParams.remove(DISTRIB_FROM_PARENT);
mirroredParams.remove(DISTRIB_FROM);
// prevent circular mirroring
mirroredParams.set(SERVER_SHOULD_MIRROR, Boolean.FALSE.toString());
}
if (log.isTraceEnabled()) {
log.trace("Create MirroringUpdateProcessor with mirroredParams={}", mirroredParams);
}
return new MirroringUpdateProcessor(next, doMirroring, indexUnmirrorableDocs, mirrorCommits, expandDbq, maxMirroringBatchSizeBytes, mirroredParams,
DistribPhase.parseParam(req.getParams().get(DISTRIB_UPDATE_PARAM)), doMirroring ? mirroringHandler : null, producerMetrics);
}