Aibao Luo created SOLR-11885: -------------------------------- Summary: Solrj client deleteByIds handle route request miss wrap basic auth credentials Key: SOLR-11885 URL: https://issues.apache.org/jira/browse/SOLR-11885 Project: Solr Issue Type: Bug Security Level: Public (Default Security Level. Issues are Public) Components: SolrJ Affects Versions: 6.6.2, 5.5.5, 7.2.1 Reporter: Aibao Luo
public Map<String,LBHttpSolrClient.Req> getRoutes(DocRouter router, DocCollection col, Map<String,List<String>> urlMap, ModifiableSolrParams params, String idField) { if ((documents == null || documents.size() == 0) && (deleteById == null || deleteById.size() == 0)) { return null; } Map<String,LBHttpSolrClient.Req> routes = new HashMap<>(); if (documents != null) { Set<Entry<SolrInputDocument,Map<String,Object>>> entries = documents.entrySet(); for (Entry<SolrInputDocument,Map<String,Object>> entry : entries) { SolrInputDocument doc = entry.getKey(); Object id = doc.getFieldValue(idField); if (id == null) { return null; } Slice slice = router.getTargetSlice(id .toString(), doc, null, null, col); if (slice == null) { return null; } List<String> urls = urlMap.get(slice.getName()); if (urls == null) { return null; } String leaderUrl = urls.get(0); LBHttpSolrClient.Req request = (LBHttpSolrClient.Req) routes .get(leaderUrl); if (request == null) { UpdateRequest updateRequest = new UpdateRequest(); updateRequest.setMethod(getMethod()); updateRequest.setCommitWithin(getCommitWithin()); updateRequest.setParams(params); updateRequest.setPath(getPath()); updateRequest.setBasicAuthCredentials(getBasicAuthUser(), getBasicAuthPassword()); request = new LBHttpSolrClient.Req(updateRequest, urls); routes.put(leaderUrl, request); } UpdateRequest urequest = (UpdateRequest) request.getRequest(); Map<String,Object> value = entry.getValue(); Boolean ow = null; if (value != null) { ow = (Boolean) value.get(OVERWRITE); } if (ow != null) { urequest.add(doc, ow); } else { urequest.add(doc); } } } // Route the deleteById's if (deleteById != null) { Iterator<Map.Entry<String,Map<String,Object>>> entries = deleteById.entrySet() .iterator(); while (entries.hasNext()) { Map.Entry<String,Map<String,Object>> entry = entries.next(); String deleteId = entry.getKey(); Map<String,Object> map = entry.getValue(); Long version = null; if (map != null) { version = (Long) map.get(VER); } Slice slice = router.getTargetSlice(deleteId, null, null, null, col); if (slice == null) { return null; } List<String> urls = urlMap.get(slice.getName()); if (urls == null) { return null; } String leaderUrl = urls.get(0); LBHttpSolrClient.Req request = routes.get(leaderUrl); if (request != null) { UpdateRequest urequest = (UpdateRequest) request.getRequest(); urequest.deleteById(deleteId, version); } else { UpdateRequest urequest = new UpdateRequest(); urequest.setParams(params); urequest.deleteById(deleteId, version); urequest.setCommitWithin(getCommitWithin()); request = new LBHttpSolrClient.Req(urequest, urls); routes.put(leaderUrl, request); } } } return routes; } when call delete by ids, inner wrapped request to routed slice should contains auth credentials from source request, as adding documents does. -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org