You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by am...@apache.org on 2020/09/30 07:04:20 UTC
svn commit: r1882146 - in /jackrabbit/oak/trunk/oak-search-elastic/src:
main/java/org/apache/jackrabbit/oak/plugins/index/elastic/
test/java/org/apache/jackrabbit/oak/plugins/index/elastic/
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));
+
+ }
+
}