Author: amrverma
Date: Wed Sep 30 07:04:20 2020
New Revision: 1882146

URL: http://svn.apache.org/viewvc?rev=1882146&view=rev
Log:
OAK-9225: Elastic index cleaner removes remote elastic index for disabled 
indexes

Modified:
    
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexCleaner.java
    
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexNameHelper.java
    
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexCleanerTest.java

Modified: 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexCleaner.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexCleaner.java?rev=1882146&r1=1882145&r2=1882146&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexCleaner.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexCleaner.java
 Wed Sep 30 07:04:20 2020
@@ -91,7 +91,12 @@ public class ElasticIndexCleaner impleme
             Set<String> existingIndices = new HashSet<>();
             
root.getChildNode(INDEX_DEFINITIONS_NAME).getChildNodeEntries().forEach(childNodeEntry
 -> {
                 PropertyState typeProperty = 
childNodeEntry.getNodeState().getProperty(IndexConstants.TYPE_PROPERTY_NAME);
-                if (typeProperty != null && 
typeProperty.getValue(Type.STRING).equals(ElasticIndexDefinition.TYPE_ELASTICSEARCH))
 {
+                String typeValue = typeProperty != null ? 
typeProperty.getValue(Type.STRING) : "";
+                /*
+                If index type is "elasticsearch" or "disabled", we try to find 
remote index name. In case of disabled lucene or
+                property indices, the remote index name would be null. So only 
elasticsearch indices are affected here.
+                 */
+                if 
(typeValue.equals(ElasticIndexDefinition.TYPE_ELASTICSEARCH) || 
typeValue.equals("disabled")) {
                     String indexPath = "/" + INDEX_DEFINITIONS_NAME + "/" + 
childNodeEntry.getName();
                     String remoteIndexName = 
ElasticIndexNameHelper.getRemoteIndexName(indexPrefix, 
childNodeEntry.getNodeState(), indexPath);
                     if (remoteIndexName != null) {

Modified: 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexNameHelper.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexNameHelper.java?rev=1882146&r1=1882145&r2=1882146&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexNameHelper.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-search-elastic/src/main/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexNameHelper.java
 Wed Sep 30 07:04:20 2020
@@ -51,7 +51,8 @@ public class ElasticIndexNameHelper {
             throw new IllegalArgumentException("Not an index definition node 
state");
         }
         PropertyState type = 
indexNode.getProperty(IndexConstants.TYPE_PROPERTY_NAME);
-        if (type == null || 
!ElasticIndexDefinition.TYPE_ELASTICSEARCH.equals(type.getValue(Type.STRING))) {
+        String typeValue = type != null ? type.getValue(Type.STRING) : "";
+        if (!ElasticIndexDefinition.TYPE_ELASTICSEARCH.equals(typeValue) && 
!"disabled".equals(typeValue)) {
             throw new IllegalArgumentException("Not an elastic index node");
         }
         PropertyState seedProp = 
indexNode.getProperty(ElasticIndexDefinition.PROP_INDEX_NAME_SEED);

Modified: 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexCleanerTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexCleanerTest.java?rev=1882146&r1=1882145&r2=1882146&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexCleanerTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-search-elastic/src/test/java/org/apache/jackrabbit/oak/plugins/index/elastic/ElasticIndexCleanerTest.java
 Wed Sep 30 07:04:20 2020
@@ -25,6 +25,7 @@ import org.junit.Test;
 
 import java.io.IOException;
 import java.util.UUID;
+import java.util.concurrent.TimeUnit;
 
 import static 
org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
 import static org.junit.Assert.assertFalse;
@@ -111,4 +112,31 @@ public class ElasticIndexCleanerTest ext
         assertTrue(esConnection.getClient().indices().exists(new 
GetIndexRequest(remoteIndexName3), RequestOptions.DEFAULT));
     }
 
+    @Test
+    public void preventDisabledIndexDeletion() throws Exception {
+        int indexDeletionThresholdTime = 5;
+        String indexId = createIndexAndContentNode("propa", "test1");
+        String indexPath = "/" + INDEX_DEFINITIONS_NAME + "/" + indexId;
+        NodeState oakIndex = 
nodeStore.getRoot().getChildNode(INDEX_DEFINITIONS_NAME);
+        NodeState indexState = oakIndex.getChildNode(indexId);
+        indexState.builder().remove();
+
+        root.refresh();
+        root.getTree(indexPath).setProperty("type", "disabled");
+        root.commit();
+
+        ElasticIndexCleaner cleaner = new ElasticIndexCleaner(esConnection, 
nodeStore, indexDeletionThresholdTime);
+        cleaner.run();
+
+        String remoteIndexName = 
ElasticIndexNameHelper.getRemoteIndexName(esConnection.getIndexPrefix(), 
indexState,
+                indexPath);
+        assertTrue(esConnection.getClient().indices().exists(new 
GetIndexRequest(remoteIndexName), RequestOptions.DEFAULT));
+
+        Thread.sleep(TimeUnit.SECONDS.toMillis(indexDeletionThresholdTime));
+        cleaner.run();
+
+        assertTrue(esConnection.getClient().indices().exists(new 
GetIndexRequest(remoteIndexName), RequestOptions.DEFAULT));
+
+    }
+
 }


Reply via email to