From 96b85b3970542e9f84dc77c53b68fc05267c38ee Mon Sep 17 00:00:00 2001 From: Shalin Shekhar Mangar Date: Fri, 27 Jun 2014 09:00:00 +0000 Subject: [PATCH] SOLR-6072: The 'deletereplica' API should remove the data and instance directory by default git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1605993 13f79535-47bb-0310-9956-ffa450edef68 --- solr/CHANGES.txt | 3 +++ .../solr/cloud/OverseerCollectionProcessor.java | 4 +++- .../apache/solr/cloud/DeleteReplicaTest.java | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index feb0e712662..3ae15a2c9b9 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -111,6 +111,9 @@ Bug Fixes * SOLR-6206: The migrate collection API fails on retry if temp collection already exists. (shalin) +* SOLR-6072: The 'deletereplica' API should remove the data and instance directory by default. + (shalin) + Other Changes --------------------- diff --git a/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java b/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java index cdd4e64e08c..69f02240b87 100644 --- a/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java +++ b/solr/core/src/java/org/apache/solr/cloud/OverseerCollectionProcessor.java @@ -863,7 +863,9 @@ public class OverseerCollectionProcessor implements Runnable, ClosableThread { // assume the core exists and try to unload it Map m = ZkNodeProps.makeMap("qt", adminPath, CoreAdminParams.ACTION, - CoreAdminAction.UNLOAD.toString(), CoreAdminParams.CORE, core); + CoreAdminAction.UNLOAD.toString(), CoreAdminParams.CORE, core, + CoreAdminParams.DELETE_INSTANCE_DIR, "true", + CoreAdminParams.DELETE_DATA_DIR, "true"); ShardRequest sreq = new ShardRequest(); sreq.purpose = 1; diff --git a/solr/core/src/test/org/apache/solr/cloud/DeleteReplicaTest.java b/solr/core/src/test/org/apache/solr/cloud/DeleteReplicaTest.java index e9fbca51e9f..ebdb8da1258 100644 --- a/solr/core/src/test/org/apache/solr/cloud/DeleteReplicaTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/DeleteReplicaTest.java @@ -23,6 +23,7 @@ import static org.apache.solr.cloud.OverseerCollectionProcessor.NUM_SLICES; import static org.apache.solr.cloud.OverseerCollectionProcessor.REPLICATION_FACTOR; import static org.apache.solr.common.cloud.ZkNodeProps.makeMap; +import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.List; @@ -31,12 +32,16 @@ import java.util.Map; import org.apache.solr.client.solrj.SolrRequest; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CloudSolrServer; +import org.apache.solr.client.solrj.impl.HttpSolrServer; +import org.apache.solr.client.solrj.request.CoreAdminRequest; import org.apache.solr.client.solrj.request.QueryRequest; +import org.apache.solr.client.solrj.response.CoreAdminResponse; import org.apache.solr.common.cloud.DocCollection; import org.apache.solr.common.cloud.Replica; import org.apache.solr.common.cloud.Slice; import org.apache.solr.common.params.MapSolrParams; import org.apache.solr.common.params.SolrParams; +import org.apache.solr.common.util.NamedList; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; @@ -104,8 +109,20 @@ public class DeleteReplicaTest extends AbstractFullDistribZkTestBase { } if (replica1 == null) fail("no active replicas found"); + + HttpSolrServer replica1Server = new HttpSolrServer(replica1.getStr("base_url")); + String dataDir = null; + try { + CoreAdminResponse status = CoreAdminRequest.getStatus(replica1.getStr("core"), replica1Server); + NamedList coreStatus = status.getCoreStatus(replica1.getStr("core")); + dataDir = (String) coreStatus.get("dataDir"); + } finally { + replica1Server.shutdown(); + } + removeAndWaitForReplicaGone(collectionName, client, replica1, shard1.getName()); + assertFalse("dataDir for " + replica1.getName() + " should have been deleted by deleteReplica API", new File(dataDir).exists()); } finally { client.shutdown(); }