You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Aibao Luo (JIRA)" <ji...@apache.org> on 2018/01/23 06:01:00 UTC

[jira] [Created] (SOLR-11885) Solrj client deleteByIds handle route request miss wrap basic auth credentials

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-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org