public void handleRequestBody()

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);
  }