Rohit created SOLR-10969:
----------------------------

             Summary: Backup API fails leaved the backup directory undeleted on 
failure of backup API call
                 Key: SOLR-10969
                 URL: https://issues.apache.org/jira/browse/SOLR-10969
             Project: Solr
          Issue Type: Bug
      Security Level: Public (Default Security Level. Issues are Public)
          Components: Backup/Restore, SolrCloud
    Affects Versions: 6.6
         Environment: Tested on Fedora 24 64-bit (Linux), 8 GB RAM, 2 CPU and 
OS: Mac OSX Sierra 
Processor: 2.6 GHz Intel Core i5 (64 bit)
RAM: 8 GB
            Reporter: Rohit
            Priority: Minor


1. Invoke the Backup API on Solr cloud
2. Backup API fails
3. A directory is created in the location=/path/to/location with 
name=myBackupname (as specified) in the backup API call.
4. In case of backup API failure the directory should be automatically deleted 
since, when recalling the API the backup api will fail stating directory 
already exists

Solr 6.6.0 (fresh install, 4 node solr cluster):
1. Create a collection in Solr called citibike:
http://localhost:8983/solr/admin/collections?action=CREATE&name=citibike&numShards=2&replicationFactor=1&maxShardsPerNode=1&collection.configName=rohit&&createNodeSet=192.168.3.15:7574_solr,192.168.3.15:8983_solr

2. Index 8 documents to Solr collection citibike:
{
  "responseHeader":{
    "zkConnected":true,
    "status":0,
    "QTime":10,
    "params":{
      "q":"*:*",
      "indent":"on",
      "wt":"json"}},
  "response":{"numFound":8,"start":0,"maxScore":1.0,"docs":[
      {
        "id":"doc1",
        "_version_":1570643322182041600},
      {
        "id":"doc2",
        "_version_":1570643322185187328},
      {
        "id":"doc3",
        "_version_":1570643322185187329},
      {
        "id":"doc5",
        "_version_":1570643322188333056},
      {
        "id":"doc6",
        "_version_":1570643322191478784},
      {
        "id":"doc7",
        "_version_":1570643322191478785},
      {
        "id":"doc8",
        "_version_":1570643322191478786},
      {
        "id":"doc4",
        "_version_":1570643322179944448}]
  }}


2. Try to create a backup of the collection with only 8 documents:
http://localhost:8983/solr/admin/collections?action=BACKUP&name=myBackupName&collection=citibike&location=/Users/Rohit/Documents/SolrInstall/backup

{
  "responseHeader":{
    "status":500,
    "QTime":20},
  "failure":{
    
"192.168.3.15:8983_solr":"org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException:Error
 from server at http://192.168.3.15:8983/solr: Failed to backup 
core=citibike_shard2_replica1 because java.nio.file.NoSuchFileException: 
/Users/Rohit/Documents/SolrInstall/solr-6.6.0/example/cloud/node1/solr/citibike_shard2_replica1/data/index/segments_8"},
  "Operation backup caused 
exception:":"org.apache.solr.common.SolrException:org.apache.solr.common.SolrException:
 Could not backup all replicas",
  "exception":{
    "msg":"Could not backup all replicas",
    "rspCode":500},
  "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.common.SolrException"],
    "msg":"Could not backup all replicas",
    "trace":"org.apache.solr.common.SolrException: Could not backup all 
replicas\n\tat 
org.apache.solr.handler.admin.CollectionsHandler.handleResponse(CollectionsHandler.java:300)\n\tat
 
org.apache.solr.handler.admin.CollectionsHandler.invokeAction(CollectionsHandler.java:237)\n\tat
 
org.apache.solr.handler.admin.CollectionsHandler.handleRequestBody(CollectionsHandler.java:215)\n\tat
 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:173)\n\tat
 org.apache.solr.servlet.HttpSolrCall.handleAdmin(HttpSolrCall.java:748)\n\tat 
org.apache.solr.servlet.HttpSolrCall.handleAdminRequest(HttpSolrCall.java:729)\n\tat
 org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:510)\n\tat 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:361)\n\tat
 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:305)\n\tat
 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1691)\n\tat
 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)\n\tat
 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)\n\tat
 
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)\n\tat
 
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)\n\tat
 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)\n\tat
 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)\n\tat 
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)\n\tat
 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)\n\tat
 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)\n\tat
 
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213)\n\tat
 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:119)\n\tat
 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)\n\tat
 
org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:335)\n\tat
 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)\n\tat
 org.eclipse.jetty.server.Server.handle(Server.java:534)\n\tat 
org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:320)\n\tat 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)\n\tat
 
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)\n\tat
 org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)\n\tat 
org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)\n\tat
 
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)\n\tat
 
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)\n\tat
 
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)\n\tat
 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)\n\tat
 
org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)\n\tat
 java.lang.Thread.run(Thread.java:745)\n",
    "code":500}}

Goto path given in location and you will see that a folder with 
name=myBackupName is created and not cleared off even if the backup API call 
fails.

Now, re-run the backup API command again. It will fail with exception "The 
backup directory already exists"

Suggested fix:
1. In case of error delete the directory in the location path automatically 
since, the partial update is not a correct backup anyways.
2. Add and locationOverwrite parameter. This parameter will clear the old 
directory and create a backup in the location specified. It will prevent users 
the need to goto the backup path and to delete the folder automatically.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to