[
https://issues.apache.org/jira/browse/SOLR-11885?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Aibao Luo updated SOLR-11885:
-----------------------------
Description:
public Map<String,LBHttpSolrClient.Req> getRoutes(DocRouter router,
DocCollection col, Map<String,List<String>> urlMap, ModifiableSolrParams
params, String idField) {
....
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);
}
....
}
while delete by ids, inner wrapped request to routed slice should contains
auth credentials from source request, as adding documents does.
was:
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.
> 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: 5.5.5, 6.6.2, 7.2.1
> Reporter: Aibao Luo
> Priority: Major
>
> public Map<String,LBHttpSolrClient.Req> getRoutes(DocRouter router,
> DocCollection col, Map<String,List<String>> urlMap, ModifiableSolrParams
> params, String idField) {
> ....
> 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);
> }
> ....
> }
>
> while 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: [email protected]
For additional commands, e-mail: [email protected]