This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/2_1_X by this push:
     new aa4c361  Upgrading Elasticsearch
aa4c361 is described below

commit aa4c36141ea68b3c637a0388455e54270c3c5867
Author: Francesco Chicchiriccò <ilgro...@apache.org>
AuthorDate: Wed Nov 21 08:50:59 2018 +0100

    Upgrading Elasticsearch
---
 .../elasticsearch/client/ElasticsearchUtils.java   |   7 +-
 .../java/job/ElasticsearchReindex.java             | 136 +++++++++------------
 .../syncope/core/logic/init/ElasticsearchInit.java |   5 +-
 .../fit/core/reference/ITImplementationLookup.java |   1 -
 pom.xml                                            |   4 +-
 .../workingwithapachesyncope/customization.adoc    |  12 +-
 6 files changed, 67 insertions(+), 98 deletions(-)

diff --git 
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
 
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
index f5b69be..464d94e 100644
--- 
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
+++ 
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
@@ -186,11 +186,6 @@ public class ElasticsearchUtils {
     }
 
     public String getContextDomainName(final AnyTypeKind kind) {
-        return AuthContextUtils.getDomain().toLowerCase()
-                + (kind.equals(AnyTypeKind.USER)
-                ? "_user"
-                : (kind.equals(AnyTypeKind.GROUP)
-                ? "_group"
-                : "_anyobject"));
+        return AuthContextUtils.getDomain().toLowerCase() + "_" + 
kind.name().toLowerCase();
     }
 }
diff --git 
a/ext/elasticsearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ElasticsearchReindex.java
 
b/ext/elasticsearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ElasticsearchReindex.java
index 1a3331f..b2e1a43 100644
--- 
a/ext/elasticsearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ElasticsearchReindex.java
+++ 
b/ext/elasticsearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ElasticsearchReindex.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.core.provisioning.java.job;
 
+import java.io.IOException;
 import java.util.concurrent.ExecutionException;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.core.persistence.api.dao.AnyDAO;
@@ -66,72 +67,16 @@ public class ElasticsearchReindex extends 
AbstractSchedTaskJobDelegate {
     @Override
     protected String doExecute(final boolean dryRun) throws 
JobExecutionException {
         if (!dryRun) {
+            LOG.debug("Start rebuilding indexes");
+
             try {
-                checkExistsIndexResponse(AnyTypeKind.USER);
-                checkExistsIndexResponse(AnyTypeKind.GROUP);
-                checkExistsIndexResponse(AnyTypeKind.ANY_OBJECT);
-
-                XContentBuilder settings = XContentFactory.jsonBuilder().
-                        startObject().
-                        startObject("analysis").
-                        startObject("analyzer").
-                        startObject("string_lowercase").
-                        field("type", "custom").
-                        field("tokenizer", "standard").
-                        field("filter").
-                        startArray().
-                        value("lowercase").
-                        endArray().
-                        endObject().
-                        endObject().
-                        endObject().
-                        endObject();
-                XContentBuilder mappingUser = XContentFactory.jsonBuilder().
-                        startObject().
-                        startArray("dynamic_templates").
-                        startObject().
-                        startObject("strings").
-                        field("match_mapping_type", "string").
-                        startObject("mapping").
-                        field("type", "keyword").
-                        field("analyzer", "string_lowercase").
-                        endObject().
-                        endObject().
-                        endObject().
-                        endArray().
-                        endObject();
-                XContentBuilder mappingGroup = XContentFactory.jsonBuilder().
-                        startObject().
-                        startArray("dynamic_templates").
-                        startObject().
-                        startObject("strings").
-                        field("match_mapping_type", "string").
-                        startObject("mapping").
-                        field("type", "keyword").
-                        field("analyzer", "string_lowercase").
-                        endObject().
-                        endObject().
-                        endObject().
-                        endArray().
-                        endObject();
-                XContentBuilder mappingAnyobject = 
XContentFactory.jsonBuilder().
-                        startObject().
-                        startArray("dynamic_templates").
-                        startObject().
-                        startObject("strings").
-                        field("match_mapping_type", "string").
-                        startObject("mapping").
-                        field("type", "keyword").
-                        field("analyzer", "string_lowercase").
-                        endObject().
-                        endObject().
-                        endObject().
-                        endArray().
-                        endObject();
-
-                createIndexResponse(AnyTypeKind.USER, settings, mappingUser);
-                createIndexResponse(AnyTypeKind.GROUP, settings, mappingGroup);
-                createIndexResponse(AnyTypeKind.ANY_OBJECT, settings, 
mappingAnyobject);
+                removeIndexIfExists(AnyTypeKind.USER);
+                removeIndexIfExists(AnyTypeKind.GROUP);
+                removeIndexIfExists(AnyTypeKind.ANY_OBJECT);
+
+                createIndex(AnyTypeKind.USER);
+                createIndex(AnyTypeKind.GROUP);
+                createIndex(AnyTypeKind.ANY_OBJECT);
 
                 LOG.debug("Indexing users...");
                 for (int page = 1; page <= (userDAO.count() / 
AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) {
@@ -145,6 +90,7 @@ public class ElasticsearchReindex extends 
AbstractSchedTaskJobDelegate {
                         LOG.debug("Index successfully created for {}: {}", 
user, response);
                     }
                 }
+
                 LOG.debug("Indexing groups...");
                 for (int page = 1; page <= (groupDAO.count() / 
AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) {
                     for (Group group : groupDAO.findAll(page, 
AnyDAO.DEFAULT_PAGE_SIZE)) {
@@ -157,6 +103,7 @@ public class ElasticsearchReindex extends 
AbstractSchedTaskJobDelegate {
                         LOG.debug("Index successfully created for {}: {}", 
group, response);
                     }
                 }
+
                 LOG.debug("Indexing any objects...");
                 for (int page = 1; page <= (anyObjectDAO.count() / 
AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) {
                     for (AnyObject anyObject : anyObjectDAO.findAll(page, 
AnyDAO.DEFAULT_PAGE_SIZE)) {
@@ -170,19 +117,18 @@ public class ElasticsearchReindex extends 
AbstractSchedTaskJobDelegate {
                     }
                 }
 
-                LOG.debug("Rebuild index {} successfully completed", 
AuthContextUtils.getDomain().toLowerCase());
+                LOG.debug("Rebuild indexes for domain {} successfully 
completed", AuthContextUtils.getDomain());
             } catch (Exception e) {
-                throw new JobExecutionException(
-                        "While rebuilding index " + 
AuthContextUtils.getDomain().toLowerCase(), e);
+                throw new JobExecutionException("While rebuilding index for 
domain " + AuthContextUtils.getDomain(), e);
             }
         }
 
         return "SUCCESS";
     }
 
-    private void checkExistsIndexResponse(final AnyTypeKind kind) throws 
InterruptedException, ExecutionException {
-        LOG.debug("Start rebuild index {}",
-                elasticsearchUtils.getContextDomainName(kind));
+    private void removeIndexIfExists(final AnyTypeKind kind)
+            throws InterruptedException, ExecutionException {
+
         IndicesExistsResponse existsIndexResponse = client.admin().indices().
                 exists(new 
IndicesExistsRequest(elasticsearchUtils.getContextDomainName(kind))).
                 get();
@@ -195,17 +141,45 @@ public class ElasticsearchReindex extends 
AbstractSchedTaskJobDelegate {
         }
     }
 
-    private void createIndexResponse(final AnyTypeKind kind,
-            final XContentBuilder settings,
-            final XContentBuilder mapping) throws InterruptedException, 
ExecutionException {
-
-        CreateIndexResponse createIndexResponseUser = client.admin().indices().
-                create(new 
CreateIndexRequest(elasticsearchUtils.getContextDomainName(kind)).
-                        settings(settings).
-                        mapping(kind.name(), mapping)).
-                get();
+    private void createIndex(final AnyTypeKind kind)
+            throws InterruptedException, ExecutionException, IOException {
+
+        XContentBuilder settings = XContentFactory.jsonBuilder().
+                startObject().
+                startObject("analysis").
+                startObject("analyzer").
+                startObject("string_lowercase").
+                field("type", "custom").
+                field("tokenizer", "standard").
+                field("filter").
+                startArray().
+                value("lowercase").
+                endArray().
+                endObject().
+                endObject().
+                endObject().
+                endObject();
+
+        XContentBuilder mapping = XContentFactory.jsonBuilder().
+                startObject().
+                startArray("dynamic_templates").
+                startObject().
+                startObject("strings").
+                field("match_mapping_type", "string").
+                startObject("mapping").
+                field("type", "keyword").
+                field("analyzer", "string_lowercase").
+                endObject().
+                endObject().
+                endObject().
+                endArray().
+                endObject();
+
+        CreateIndexResponse response = client.admin().indices().
+                create(new 
CreateIndexRequest(elasticsearchUtils.getContextDomainName(kind)).settings(settings).
+                        mapping(kind.name(), mapping)).get();
         LOG.debug("Successfully created {} for {}: {}",
-                elasticsearchUtils.getContextDomainName(kind), kind.name(), 
createIndexResponseUser);
+                elasticsearchUtils.getContextDomainName(kind), kind.name(), 
response);
     }
 
     @Override
diff --git 
a/fit/core-reference/src/main/java/org/apache/syncope/core/logic/init/ElasticsearchInit.java
 
b/fit/core-reference/src/main/java/org/apache/syncope/core/logic/init/ElasticsearchInit.java
index 60d1893..404f789 100644
--- 
a/fit/core-reference/src/main/java/org/apache/syncope/core/logic/init/ElasticsearchInit.java
+++ 
b/fit/core-reference/src/main/java/org/apache/syncope/core/logic/init/ElasticsearchInit.java
@@ -33,6 +33,8 @@ import 
org.springframework.transaction.annotation.Transactional;
 @Component
 public class ElasticsearchInit {
 
+    private static final String ES_REINDEX = 
"org.apache.syncope.core.provisioning.java.job.ElasticsearchReindex";
+
     @Autowired
     private ImplementationDAO implementationDAO;
 
@@ -42,8 +44,6 @@ public class ElasticsearchInit {
     @Autowired
     private TaskLogic taskLogic;
 
-    private static final String ES_REINDEX = 
"org.apache.syncope.core.provisioning.java.job.ElasticsearchReindex";
-
     @Transactional
     public void init() {
         Implementation reindex = 
implementationDAO.find(ImplementationType.TASKJOB_DELEGATE).
@@ -67,5 +67,4 @@ public class ElasticsearchInit {
 
         taskLogic.execute(task.getKey(), null, false);
     }
-
 }
diff --git 
a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/ITImplementationLookup.java
 
b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/ITImplementationLookup.java
index c8c2a5e..3ab13c9 100644
--- 
a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/ITImplementationLookup.java
+++ 
b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/ITImplementationLookup.java
@@ -252,7 +252,6 @@ public class ITImplementationLookup implements 
ImplementationLookup {
             for (Map.Entry<String, DataSource> entry : 
domainsHolder.getDomains().entrySet()) {
                 AuthContextUtils.execWithAuthContext(entry.getKey(), () -> {
                     elasticsearchInit.init();
-
                     return null;
                 });
             }
diff --git a/pom.xml b/pom.xml
index 7a0d82c..9b6e899 100644
--- a/pom.xml
+++ b/pom.xml
@@ -415,7 +415,7 @@ under the License.
     <slf4j.version>1.7.25</slf4j.version>
     <opensaml.version>3.3.0</opensaml.version>
 
-    <elasticsearch.version>6.5.0</elasticsearch.version>
+    <elasticsearch.version>6.5.1</elasticsearch.version>
 
     <log4j.version>2.11.1</log4j.version>
     <disruptor.version>3.4.2</disruptor.version>
@@ -2326,7 +2326,7 @@ under the License.
             
<link>https://docs.spring.io/spring-security/site/docs/5.0.x/api/</link>
             <link>http://www.flowable.org/docs/javadocs/</link>
             
<link>https://build.shibboleth.net/nexus/content/sites/site/java-opensaml/3.3.0/apidocs/</link>
-            
<link>https://artifacts.elastic.co/javadoc/org/elasticsearch/elasticsearch/6.5.0/index.html</link>
+            
<link>https://artifacts.elastic.co/javadoc/org/elasticsearch/elasticsearch/6.5.1/index.html</link>
             <link>http://docs.swagger.io/swagger-core/v2.0.5/apidocs/</link>
           </links>
         </configuration>
diff --git 
a/src/main/asciidoc/reference-guide/workingwithapachesyncope/customization.adoc 
b/src/main/asciidoc/reference-guide/workingwithapachesyncope/customization.adoc
index 11104fd..5ec39c3 100644
--- 
a/src/main/asciidoc/reference-guide/workingwithapachesyncope/customization.adoc
+++ 
b/src/main/asciidoc/reference-guide/workingwithapachesyncope/customization.adoc
@@ -487,12 +487,14 @@ classpath*:/provisioning*Context.xml
 classpath*:/workflow*Context.xml
 ....
 
-It is also required to initialize the Elasticsearch indexes.
+It is also required to initialize the Elasticsearch indexes: add a new Java 
<<implementations,implementation>> for
+`TASKJOB_DELEGATE` and use 
`org.apache.syncope.core.provisioning.java.job.ElasticsearchReindex` as class. +
+Then, create a new <<tasks-custom, custom task>>, select the implementation 
just created as job delegate and execute it.
 
-Add a new Java <<implementations,implementation>> for `TASKJOB_DELEGATE` and 
use 
-`org.apache.syncope.core.provisioning.java.job.ElasticsearchReindex` as class.
-
-Then, create a new <<tasks-custom, Custom task>>, select the implementation 
just created as job delegate and execute it.
+[TIP]
+The `org.apache.syncope.core.provisioning.java.job.ElasticsearchReindex` 
custom task created above is not meant for
+scheduled execution; rather, it can be run every time you want to blank and 
re-create the Elasticsearch indexes
+starting from Syncope's users, groups and any objects.
 
 [discrete]
 ===== Enable the <<SCIM>> extension

Reply via email to