docs: @Override
  	public int distributedProcess(ResponseBuilder rb) throws IOException {
  		 // System.out.println(System.nanoTime() + " - "
  		 // + Thread.currentThread().getId() + " - "
  		 // + rb.req.getParams().getBool(ShardParams.IS_SHARD, false)
  		 // + " DISTIRBUTEDPROCESS " + rb.stage + " " + rb.req.getParamString());
  		MtasSolrStatus solrStatus = Objects
  				.requireNonNull((MtasSolrStatus) rb.req.getContext().get(MtasSolrStatus.class), "couldn't find status");
  		solrStatus.setStage(rb.stage);
  		try {
  			if (rb.req.getParams().getBool(PARAM_MTAS, false)) {
  				if (rb.stage == STAGE_TERMVECTOR_MISSING_TOP || rb.stage == STAGE_TERMVECTOR_MISSING_KEY
  						|| rb.stage == STAGE_TERMVECTOR_FINISH) {
  					ComponentFields mtasFields = getMtasFields(rb);
  					searchTermvector.distributedProcess(rb, mtasFields);
  				} else if (rb.stage == STAGE_LIST) {
  					ComponentFields mtasFields = getMtasFields(rb);
  					searchList.distributedProcess(rb, mtasFields);
  				} else if (rb.stage == STAGE_PREFIX) {
  					ComponentFields mtasFields = getMtasFields(rb);
  					searchPrefix.distributedProcess(rb, mtasFields);
  				} else if (rb.stage == STAGE_STATS) {
  					ComponentFields mtasFields = getMtasFields(rb);
  					searchStats.distributedProcess(rb, mtasFields);
  				} else if (rb.stage == STAGE_FACET) {
  					ComponentFields mtasFields = getMtasFields(rb);
  					searchFacet.distributedProcess(rb, mtasFields);
  				} else if (rb.stage == STAGE_COLLECTION_INIT || rb.stage == STAGE_COLLECTION_FINISH) {
  					ComponentFields mtasFields = getMtasFields(rb);
  					searchCollection.distributedProcess(rb, mtasFields);
  				} else if (rb.stage == STAGE_GROUP) {
  					ComponentFields mtasFields = getMtasFields(rb);
  					searchGroup.distributedProcess(rb, mtasFields);
  				} else if (rb.stage == STAGE_DOCUMENT) {
  					ComponentFields mtasFields = getMtasFields(rb);
  					searchDocument.distributedProcess(rb, mtasFields);
  				}
  				// compute new stage and return if not finished
  				if (rb.stage >= ResponseBuilder.STAGE_EXECUTE_QUERY && rb.stage < ResponseBuilder.STAGE_GET_FIELDS) {
  					if (rb.stage < STAGE_TERMVECTOR_MISSING_TOP
  							&& rb.req.getParams().getBool(MtasSolrComponentTermvector.PARAM_MTAS_TERMVECTOR, false)) {
  						return STAGE_TERMVECTOR_MISSING_TOP;
  					} else if (rb.stage < STAGE_TERMVECTOR_MISSING_KEY
  							&& rb.req.getParams().getBool(MtasSolrComponentTermvector.PARAM_MTAS_TERMVECTOR, false)) {
  						return STAGE_TERMVECTOR_MISSING_KEY;
  					} else if (rb.stage < STAGE_TERMVECTOR_FINISH
  							&& rb.req.getParams().getBool(MtasSolrComponentTermvector.PARAM_MTAS_TERMVECTOR, false)) {
  						return STAGE_TERMVECTOR_FINISH;
  					} else if (rb.stage < STAGE_LIST
  							&& rb.req.getParams().getBool(MtasSolrComponentList.PARAM_MTAS_LIST, false)) {
  						return STAGE_LIST;
  					} else if (rb.stage < STAGE_PREFIX
  							&& rb.req.getParams().getBool(MtasSolrComponentPrefix.PARAM_MTAS_PREFIX, false)) {
  						return STAGE_PREFIX;
  					} else if (rb.stage < STAGE_STATS
  							&& rb.req.getParams().getBool(MtasSolrComponentStats.PARAM_MTAS_STATS, false)) {
  						return STAGE_STATS;
  					} else if (rb.stage < STAGE_FACET
  							&& rb.req.getParams().getBool(MtasSolrComponentFacet.PARAM_MTAS_FACET, false)) {
  						return STAGE_FACET;
  					} else if (rb.stage < STAGE_GROUP
  							&& rb.req.getParams().getBool(MtasSolrComponentGroup.PARAM_MTAS_GROUP, false)) {
  						return STAGE_GROUP;
  					} else if (rb.stage < STAGE_COLLECTION_INIT
  							&& rb.req.getParams().getBool(MtasSolrComponentCollection.PARAM_MTAS_COLLECTION, false)) {
  						return STAGE_COLLECTION_INIT;
  					} else if (rb.stage < STAGE_COLLECTION_FINISH
  							&& rb.req.getParams().getBool(MtasSolrComponentCollection.PARAM_MTAS_COLLECTION, false)) {
  						return STAGE_COLLECTION_FINISH;
  					}
  				} else if (rb.stage >= ResponseBuilder.STAGE_GET_FIELDS && rb.stage < ResponseBuilder.STAGE_DONE) {
  					if (rb.stage < STAGE_DOCUMENT
  							&& rb.req.getParams().getBool(MtasSolrComponentDocument.PARAM_MTAS_DOCUMENT, false)) {
  						return STAGE_DOCUMENT;
  					}
  				}
  			}
  		} catch (ExitableDirectoryReader.ExitingReaderException e) {
  			solrStatus.setError(e.getMessage());
  			finishStatus(solrStatus);
  		} finally {
  		  checkStatus(solrStatus);
  		}
  		return ResponseBuilder.STAGE_DONE;
  	}