private void writeResponse( SolrQueryResponse solrRsp, QueryResponseWriter responseWriter, Method reqMethod) throws IOException { try { Object invalidStates = solrReq.getContext().get(CloudSolrClient.STATE_VERSION); // This is the last item added to the response and the client would expect it that way. // If that assumption is changed , it would fail. This is done to avoid an O(n) scan on // the response for each request if (invalidStates != null) solrRsp.add(CloudSolrClient.STATE_VERSION, invalidStates); // Now write it out final String ct = responseWriter.getContentType(solrReq, solrRsp); // don't call setContentType on null if (null != ct) response.setContentType(ct); if (solrRsp.getException() != null) { NamedList info = new SimpleOrderedMap(); int code = ResponseUtils.getErrorInfo(solrRsp.getException(), info, log); solrRsp.add("error", info); response.setStatus(code); } if (Method.HEAD != reqMethod) { OutputStream out = new CloseShieldOutputStream( response.getOutputStream()); // Prevent close of container streams, see SOLR-8933 QueryResponseWriterUtil.writeQueryResponse(out, responseWriter, solrReq, solrRsp, ct); } // else http HEAD request, nothing to write out, waited this long just to get ContentType } catch (EOFException e) { log.info("Unable to write response, client closed connection or we are shutting down", e); } }
protected void writeResponse( SolrQueryResponse solrRsp, QueryResponseWriter responseWriter, SolrQueryRequest solrReq) throws IOException { Object invalidStates = solrReq.getContext().get(CloudSolrClient.STATE_VERSION); // This is the last item added to the applyResult and the client would expect it that way. // If that assumption is changed , it would fail. This is done to avoid an O(n) scan on // the applyResult for each request if (invalidStates != null) solrRsp.add(CloudSolrClient.STATE_VERSION, invalidStates); // Now write it out final String ct = responseWriter.getContentType(solrReq, solrRsp); // don't call setContentType on null if (null != ct) { responseSetter.setContentType(ct); } if (solrRsp.getException() != null) { NamedList info = new SimpleOrderedMap(); int code = ResponseUtils.getErrorInfo(solrRsp.getException(), info, logger); // solrRsp.add("error", info); // use protocol response exception instead of set 'error' response return to client, responseSetter.setSolrResponseException(code, info); } QueryResponseWriterUtil.writeQueryResponse( responseSetter.getResponseOutputStream(), responseWriter, solrReq, solrRsp, ct); // fire QueryResponse write Complete responseSetter.writeQueryResponseComplete(solrRsp); }