[ 
https://issues.apache.org/jira/browse/SOLR-15417?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

xuanyu huang updated SOLR-15417:
--------------------------------
    Description: 
Hi there, 

I'm using solrj 8.8.2 for a 8.5.1 solr server. I have a list of records and in 
a for loop I construct an updateRequest to update each record.

Code looks like this
{code:java}
for (Map<String, Object> map : maps) {
  if (map.containsKey("record_uuid")) {
     UpdateRequest updateRequest = new UpdateRequest();
     updateRequest.setAction( UpdateRequest.ACTION.COMMIT, false, false);

     SolrInputDocument doc = new SolrInputDocument();
     if (idx == 3) {
         doc.addField("id", map.get("record_uuid") + "_invalid");
     } else {
         doc.addField("id", map.get("record_uuid"));
     }
     idx++;

     doc.addField("hasUserAssertions", new HashMap<String, Object>() {{ 
put("set", true); }});
     // this makes sure update only succeeds when record with specified id 
exists
     doc.addField("_version_", 1);

     logger.debug("Added solr doc for record: " + doc.get("id"));
     updateRequest.add(doc);

     try {
         updateRequest.setParam("failOnVersionConflicts", "false");
         UpdateResponse process = updateRequest.process(solrClient);
         System.out.println("xhk205 process = " + process.toString());
     } catch (Exception e) {
         logger.error("Failed to update solr doc, error message: " + 
e.getMessage(), e);
     }
 }{code}
There are 5 requests in total and I intentionally set the id in 3rd request to 
be an invalid id so that updateRequet for 3rd record should fail. (This is to 
mimic the situation where the record to be updated no longer exists in solr, so 
I only want those updates with a valid id to succeed, those updates with an 
invalid id should fail/rejected instead of creating a new reocrd in solr, so I 
used __version__=1).

 

Also I used the syntax to do partial update.

The variable doc looks like this
{code:java}
{
"id":"2d4b625d-8809-461f-b19b-d0c963e038ed",
"hasUserAssertions":{"set":true}
}
{code}
 

Since each update is put into its own request, I suppose only the 3rd request 
will fail because there's no record with that id and I've set 
{color:#0747a6}__version__{color} to 1. But the reality is, only the first 2 
records were updated and other 3 not.

When I query in solr admin console with 
[http://localhost:8983/solr/biocache/select?fq=hasUserAssertions:true&q=*:*]  
there's only 2 records returned.

 

Below is the log of IntelliJ IDEA:

 
  
{code:java}
- Added solr doc for record: id=429cfa88-2e18-46b0-ab9f-f4efd9e36c3c 
xhk205 process = {NOTE=the request is processed in a background stream} 
- Added solr doc for record: id=5a80561b-a68d-46a3-a59b-03d267f35d0e 
xhk205 process = {NOTE=the request is processed in a background stream} 
- Added solr doc for record: id=ff2dcbee-9c05-491f-91a8-9f1fec348546_invalid 
xhk205 process = {NOTE=the request is processed in a background stream} 
- Added solr doc for record: id=baf7af1f-1525-403a-95bf-e28e432f1b12 
xhk205 process = {NOTE=the request is processed in a background stream} 
- Added solr doc for record: id=4ea76605-c262-409b-845e-213f11ea4e34 
xhk205 process = {NOTE=the request is processed in a background stream}{code}
 
  
  
{code:java}
2021-05-19 14:12:16,827 ERROR: [ConcurrentUpdateSolrClient] - error 
org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error 
from server at http://localhost:8983/solr/biocache: Conflict       request: 
http://localhost:8983/solr/biocache/update?commit=true&softCommit=false&waitSearcher=false&failOnVersionConflicts=false&wt=javabin&version=2
 Remote error message: Document not found for update.  
id=ff2dcbee-9c05-491f-91a8-9f1fec348546_invalid at 
org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient$Runner.sendUpdateStream(ConcurrentUpdateSolrClient.java:394)
 at 
org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient$Runner.run(ConcurrentUpdateSolrClient.java:191)
         at 
org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.lambda$execute$0{code}
 
  
 The 3rd update caused an exception. Is it possible that this exception caused 
solr client or server in some non-useable state so all subsequent updates 
failed?
  

 

 

  was:
Hi there, 

I'm using solrj 8.8.2 for a 8.5.1 solr server. I have a list of records and in 
a for loop I construct an updateRequest to update each record.

Code looks like this
{code:java}
for (Map<String, Object> map : maps) {
  if (map.containsKey("record_uuid")) {
     UpdateRequest updateRequest = new UpdateRequest();
     updateRequest.setAction( UpdateRequest.ACTION.COMMIT, false, false);

     SolrInputDocument doc = new SolrInputDocument();
     if (idx == 3) {
         doc.addField("id", map.get("record_uuid") + "_invalid");
     } else {
         doc.addField("id", map.get("record_uuid"));
     }
     idx++;

     doc.addField("hasUserAssertions", new HashMap<String, Object>() {{ 
put("set", true); }});
     // this makes sure update only succeeds when record with specified id 
exists
     doc.addField("_version_", 1);

     logger.debug("Added solr doc for record: " + doc.get("id"));
     updateRequest.add(doc);

     try {
         updateRequest.setParam("failOnVersionConflicts", "false");
         UpdateResponse process = updateRequest.process(solrClient);
         System.out.println("xhk205 process = " + process.toString());
     } catch (Exception e) {
         logger.error("Failed to update solr doc, error message: " + 
e.getMessage(), e);
     }
 }{code}
There are 5 requests in total and I intentionally set the id in 3rd request to 
be an invalid id so that updateRequet for 3rd record should fail. (This is to 
mimic the situation where the record to be updated no longer exists in solr, so 
I only want those updates with a valid id to succeed, those updates with an 
invalid id should fail/rejected instead of creating a new reocrd in solr, so I 
used __version__=1).

 

Also I used the syntax to do partial update.

The variable doc look like this

 
{code:java}
{
"id":"2d4b625d-8809-461f-b19b-d0c963e038ed",
"hasUserAssertions":{"set:true}
}
{code}
 

 

Since each update is put into its own request, I suppose only the 3rd request 
will fail because there's no record with that id and I've set 
{color:#0747a6}__version__{color} to 1. But the reality is, only the first 2 
records were updated and other 3 not.

When I query in solr admin console with 
[http://localhost:8983/solr/biocache/select?fq=hasUserAssertions:true&q=*:*]  
there's only 2 records returned.

 

Below is the log of IntelliJ IDEA:

 
  
{code:java}
- Added solr doc for record: id=429cfa88-2e18-46b0-ab9f-f4efd9e36c3c 
xhk205 process = {NOTE=the request is processed in a background stream} 
- Added solr doc for record: id=5a80561b-a68d-46a3-a59b-03d267f35d0e 
xhk205 process = {NOTE=the request is processed in a background stream} 
- Added solr doc for record: id=ff2dcbee-9c05-491f-91a8-9f1fec348546_invalid 
xhk205 process = {NOTE=the request is processed in a background stream} 
- Added solr doc for record: id=baf7af1f-1525-403a-95bf-e28e432f1b12 
xhk205 process = {NOTE=the request is processed in a background stream} 
- Added solr doc for record: id=4ea76605-c262-409b-845e-213f11ea4e34 
xhk205 process = {NOTE=the request is processed in a background stream}{code}
 
  
  
{code:java}
2021-05-19 14:12:16,827 ERROR: [ConcurrentUpdateSolrClient] - error 
org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error 
from server at http://localhost:8983/solr/biocache: Conflict       request: 
http://localhost:8983/solr/biocache/update?commit=true&softCommit=false&waitSearcher=false&failOnVersionConflicts=false&wt=javabin&version=2
 Remote error message: Document not found for update.  
id=ff2dcbee-9c05-491f-91a8-9f1fec348546_invalid at 
org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient$Runner.sendUpdateStream(ConcurrentUpdateSolrClient.java:394)
 at 
org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient$Runner.run(ConcurrentUpdateSolrClient.java:191)
         at 
org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.lambda$execute$0{code}
 
  
 The 3rd update caused an exception. Is it possible that this exception caused 
solr client or server in some non-useable state so all subsequent updates 
failed?
  

 

 


> exception in updateRequest caused all subsequent update fail
> ------------------------------------------------------------
>
>                 Key: SOLR-15417
>                 URL: https://issues.apache.org/jira/browse/SOLR-15417
>             Project: Solr
>          Issue Type: Bug
>      Security Level: Public(Default Security Level. Issues are Public) 
>          Components: UpdateRequestProcessors
>    Affects Versions: 8.5.1
>            Reporter: xuanyu huang
>            Priority: Minor
>
> Hi there, 
> I'm using solrj 8.8.2 for a 8.5.1 solr server. I have a list of records and 
> in a for loop I construct an updateRequest to update each record.
> Code looks like this
> {code:java}
> for (Map<String, Object> map : maps) {
>   if (map.containsKey("record_uuid")) {
>      UpdateRequest updateRequest = new UpdateRequest();
>      updateRequest.setAction( UpdateRequest.ACTION.COMMIT, false, false);
>      SolrInputDocument doc = new SolrInputDocument();
>      if (idx == 3) {
>          doc.addField("id", map.get("record_uuid") + "_invalid");
>      } else {
>          doc.addField("id", map.get("record_uuid"));
>      }
>      idx++;
>      doc.addField("hasUserAssertions", new HashMap<String, Object>() {{ 
> put("set", true); }});
>      // this makes sure update only succeeds when record with specified id 
> exists
>      doc.addField("_version_", 1);
>      logger.debug("Added solr doc for record: " + doc.get("id"));
>      updateRequest.add(doc);
>      try {
>          updateRequest.setParam("failOnVersionConflicts", "false");
>          UpdateResponse process = updateRequest.process(solrClient);
>          System.out.println("xhk205 process = " + process.toString());
>      } catch (Exception e) {
>          logger.error("Failed to update solr doc, error message: " + 
> e.getMessage(), e);
>      }
>  }{code}
> There are 5 requests in total and I intentionally set the id in 3rd request 
> to be an invalid id so that updateRequet for 3rd record should fail. (This is 
> to mimic the situation where the record to be updated no longer exists in 
> solr, so I only want those updates with a valid id to succeed, those updates 
> with an invalid id should fail/rejected instead of creating a new reocrd in 
> solr, so I used __version__=1).
>  
> Also I used the syntax to do partial update.
> The variable doc looks like this
> {code:java}
> {
> "id":"2d4b625d-8809-461f-b19b-d0c963e038ed",
> "hasUserAssertions":{"set":true}
> }
> {code}
>  
> Since each update is put into its own request, I suppose only the 3rd request 
> will fail because there's no record with that id and I've set 
> {color:#0747a6}__version__{color} to 1. But the reality is, only the first 2 
> records were updated and other 3 not.
> When I query in solr admin console with 
> [http://localhost:8983/solr/biocache/select?fq=hasUserAssertions:true&q=*:*]  
> there's only 2 records returned.
>  
> Below is the log of IntelliJ IDEA:
>  
>   
> {code:java}
> - Added solr doc for record: id=429cfa88-2e18-46b0-ab9f-f4efd9e36c3c 
> xhk205 process = {NOTE=the request is processed in a background stream} 
> - Added solr doc for record: id=5a80561b-a68d-46a3-a59b-03d267f35d0e 
> xhk205 process = {NOTE=the request is processed in a background stream} 
> - Added solr doc for record: id=ff2dcbee-9c05-491f-91a8-9f1fec348546_invalid 
> xhk205 process = {NOTE=the request is processed in a background stream} 
> - Added solr doc for record: id=baf7af1f-1525-403a-95bf-e28e432f1b12 
> xhk205 process = {NOTE=the request is processed in a background stream} 
> - Added solr doc for record: id=4ea76605-c262-409b-845e-213f11ea4e34 
> xhk205 process = {NOTE=the request is processed in a background stream}{code}
>  
>   
>   
> {code:java}
> 2021-05-19 14:12:16,827 ERROR: [ConcurrentUpdateSolrClient] - error 
> org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error 
> from server at http://localhost:8983/solr/biocache: Conflict       request: 
> http://localhost:8983/solr/biocache/update?commit=true&softCommit=false&waitSearcher=false&failOnVersionConflicts=false&wt=javabin&version=2
>  Remote error message: Document not found for update.  
> id=ff2dcbee-9c05-491f-91a8-9f1fec348546_invalid at 
> org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient$Runner.sendUpdateStream(ConcurrentUpdateSolrClient.java:394)
>  at 
> org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient$Runner.run(ConcurrentUpdateSolrClient.java:191)
>          at 
> org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.lambda$execute$0{code}
>  
>   
>  The 3rd update caused an exception. Is it possible that this exception 
> caused solr client or server in some non-useable state so all subsequent 
> updates failed?
>   
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to