in crossdc-producer/src/main/java/org/apache/solr/handler/admin/MirroringCollectionsHandler.java [83:125]
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
log.debug("-- handler got req params={}", req.getParams());
DistributedUpdateProcessorFactory.addParamToDistributedRequestWhitelist(req, CrossDcConstants.SHOULD_MIRROR);
// throw any errors before mirroring
baseHandleRequestBody(req, rsp);
if (rsp.getException() != null) {
return;
}
if (sink == null) {
return;
}
boolean doMirroring = req.getParams().getBool(CrossDcConstants.SHOULD_MIRROR, true);
if (!doMirroring) {
log.debug(" -- doMirroring=false, skipping...");
return;
}
CollectionParams.CollectionAction action = CollectionParams.CollectionAction.get(req.getParams().get(CoreAdminParams.ACTION));
if (action == null) {
log.debug("-- unrecognized action, skipping mirroring. Params: {}", req.getParams());
return;
}
// select collection names only when they are mirrored
if (!collections.isEmpty()) {
String collection;
if (action == CollectionParams.CollectionAction.CREATE) {
collection = req.getParams().get(CommonParams.NAME);
} else {
collection = req.getParams().get(CollectionAdminParams.COLLECTION);
}
if (!collections.contains(collection)) {
log.debug("-- collection {} not enabled for mirroring, skipping...", collection);
return;
}
}
// mirror
ModifiableSolrParams mirrorParams = ModifiableSolrParams.of(req.getParams());
// make sure to turn this off to prevent looping
mirrorParams.set(CrossDcConstants.SHOULD_MIRROR, Boolean.FALSE.toString());
log.debug(" -- mirroring mirrorParams={}, original responseHeader={}, responseValues={}", mirrorParams, rsp.getResponseHeader(), rsp.getValues());
SolrRequest solrRequest = new MirroredSolrRequest.MirroredAdminRequest(action, mirrorParams);
MirroredSolrRequest mirror = new MirroredSolrRequest(MirroredSolrRequest.Type.ADMIN, solrRequest);
sink.submit(mirror);
}