You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2019/09/04 12:35:23 UTC
[syncope] branch 2_0_X updated: [SYNCOPE-1485] Reduce temporary
result cache
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/2_0_X by this push:
new 21d4e85 [SYNCOPE-1485] Reduce temporary result cache
21d4e85 is described below
commit 21d4e85697ae25dc801ef1055e9dd79f1dd446d4
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Wed Sep 4 14:05:57 2019 +0200
[SYNCOPE-1485] Reduce temporary result cache
---
.../syncope/core/persistence/api/dao/AnyDAO.java | 9 +++++++++
.../core/persistence/jpa/dao/AbstractAnyDAO.java | 17 +++++++++++++++++
.../core/persistence/jpa/dao/JPAAnyObjectDAO.java | 5 +++++
.../core/persistence/jpa/dao/JPAGroupDAO.java | 5 +++++
.../core/persistence/jpa/dao/JPAUserDAO.java | 5 +++++
.../core/persistence/jpa/inner/AnyObjectTest.java | 13 +++++++++++++
.../core/persistence/jpa/inner/GroupTest.java | 9 +++++++--
.../core/persistence/jpa/inner/UserTest.java | 9 +++++++--
.../provisioning/java/job/ElasticsearchReindex.java | 21 +++++++++------------
9 files changed, 77 insertions(+), 16 deletions(-)
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
index 41e81a9..b0c1d55 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java
@@ -80,6 +80,15 @@ public interface AnyDAO<A extends Any<?>> extends DAO<A> {
*/
List<A> findAll(int page, int itemsPerPage);
+ /**
+ * Find any objects' keys without any limitation, according to given page and items per page.
+ *
+ * @param page search result page
+ * @param itemsPerPage items per search result page
+ * @return any objects' keys matching the provided conditions
+ */
+ List<String> findAllKeys(int page, int itemsPerPage);
+
<S extends Schema> AllowedSchemas<S> findAllowedSchemas(A any, Class<S> reference);
A save(A any);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
index a509d05..e3ab5e7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java
@@ -125,6 +125,23 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im
return key;
}
+ protected List<String> findAllKeys(final String table, final int page, final int itemsPerPage) {
+ Query query = entityManager().createNativeQuery(
+ "SELECT id FROM " + table + " ORDER BY id", String.class);
+ query.setFirstResult(itemsPerPage * (page <= 0 ? 0 : page - 1));
+ query.setMaxResults(itemsPerPage);
+
+ List<String> result = new ArrayList<>();
+ for (Object key : query.getResultList()) {
+ String actualKey = key instanceof Object[]
+ ? (String) ((Object[]) key)[0]
+ : ((String) key);
+
+ result.add(actualKey.toString());
+ }
+ return result;
+ }
+
protected Date findLastChange(final String key, final String table) {
Query query = entityManager().createNativeQuery(
"SELECT creationDate, lastChangeDate FROM " + table + " WHERE id=?");
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
index b95dae5..d8c549b 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java
@@ -218,6 +218,11 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj
return query.getResultList();
}
+ @Override
+ public List<String> findAllKeys(final int page, final int itemsPerPage) {
+ return findAllKeys(JPAAnyObject.TABLE, page, itemsPerPage);
+ }
+
private Pair<AnyObject, Pair<Set<String>, Set<String>>> doSave(final AnyObject anyObject) {
AnyObject merged = super.save(anyObject);
publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, merged, AuthContextUtils.getDomain()));
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
index ae02ed2..0a0ebbd 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
@@ -269,6 +269,11 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
return query.getResultList();
}
+ @Override
+ public List<String> findAllKeys(final int page, final int itemsPerPage) {
+ return findAllKeys(JPAGroup.TABLE, page, itemsPerPage);
+ }
+
private SearchCond buildDynMembershipCond(final String baseCondFIQL, final Realm groupRealm) {
AssignableCond cond = new AssignableCond();
cond.setRealmFullPath(groupRealm.getFullPath());
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
index d664e78..6282297 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java
@@ -282,6 +282,11 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO {
return query.getResultList();
}
+ @Override
+ public List<String> findAllKeys(final int page, final int itemsPerPage) {
+ return findAllKeys(JPAUser.TABLE, page, itemsPerPage);
+ }
+
private List<AccountPolicy> getAccountPolicies(final User user) {
List<AccountPolicy> policies = new ArrayList<>();
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
index 18172c5..e9787ee 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AnyObjectTest.java
@@ -18,10 +18,12 @@
*/
package org.apache.syncope.core.persistence.jpa.inner;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import java.util.List;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
@@ -53,6 +55,17 @@ public class AnyObjectTest extends AbstractTest {
}
@Test
+ public void findAll() {
+ List<AnyObject> anyObjects = anyObjectDAO.findAll(1, 100);
+ assertNotNull(anyObjects);
+
+ List<String> anyObjectKeys = anyObjectDAO.findAllKeys(1, 100);
+ assertNotNull(anyObjectKeys);
+
+ assertEquals(anyObjects.size(), anyObjectKeys.size());
+ }
+
+ @Test
public void save() {
AnyObject anyObject = entityFactory.newEntity(AnyObject.class);
anyObject.setName("a name");
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
index c3ef956..7ffa140 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/GroupTest.java
@@ -47,8 +47,13 @@ public class GroupTest extends AbstractTest {
@Test
public void findAll() {
- List<Group> list = groupDAO.findAll(1, 100);
- assertEquals("did not get expected number of groups ", 16, list.size());
+ List<Group> groups = groupDAO.findAll(1, 100);
+ assertEquals("did not get expected number of groups ", 16, groups.size());
+
+ List<String> groupKeys = groupDAO.findAllKeys(1, 100);
+ assertNotNull(groupKeys);
+
+ assertEquals(groups.size(), groupKeys.size());
}
@Test
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
index d46f270..4beec57 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
@@ -65,8 +65,13 @@ public class UserTest extends AbstractTest {
@Test
public void findAll() {
- List<User> list = userDAO.findAll(1, 100);
- assertEquals("did not get expected number of users", 5, list.size());
+ List<User> users = userDAO.findAll(1, 100);
+ assertEquals("did not get expected number of users", 5, users.size());
+
+ List<String> userKeys = userDAO.findAllKeys(1, 100);
+ assertNotNull(userKeys);
+
+ assertEquals(users.size(), userKeys.size());
}
@Test
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 d098a99..bc03bd4 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
@@ -23,10 +23,7 @@ import org.apache.syncope.core.persistence.api.dao.AnyDAO;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
-import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
-import org.apache.syncope.core.persistence.api.entity.group.Group;
import org.apache.syncope.core.persistence.api.entity.task.TaskExec;
-import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.apache.syncope.ext.elasticsearch.client.ElasticsearchUtils;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
@@ -120,36 +117,36 @@ public class ElasticsearchReindex extends AbstractSchedTaskJobDelegate {
LOG.debug("Indexing users...");
for (int page = 1; page <= (userDAO.count() / AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) {
- for (User user : userDAO.findAll(page, AnyDAO.DEFAULT_PAGE_SIZE)) {
+ for (String user : userDAO.findAllKeys(page, AnyDAO.DEFAULT_PAGE_SIZE)) {
IndexResponse response = client.prepareIndex(
AuthContextUtils.getDomain().toLowerCase(),
AnyTypeKind.USER.name(),
- user.getKey()).
- setSource(elasticsearchUtils.builder(user)).
+ user).
+ setSource(elasticsearchUtils.builder(userDAO.find(user))).
get();
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)) {
+ for (String group : groupDAO.findAllKeys(page, AnyDAO.DEFAULT_PAGE_SIZE)) {
IndexResponse response = client.prepareIndex(
AuthContextUtils.getDomain().toLowerCase(),
AnyTypeKind.GROUP.name(),
- group.getKey()).
- setSource(elasticsearchUtils.builder(group)).
+ group).
+ setSource(elasticsearchUtils.builder(groupDAO.find(group))).
get();
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)) {
+ for (String anyObject : anyObjectDAO.findAllKeys(page, AnyDAO.DEFAULT_PAGE_SIZE)) {
IndexResponse response = client.prepareIndex(
AuthContextUtils.getDomain().toLowerCase(),
AnyTypeKind.ANY_OBJECT.name(),
- anyObject.getKey()).
- setSource(elasticsearchUtils.builder(anyObject)).
+ anyObject).
+ setSource(elasticsearchUtils.builder(anyObjectDAO.find(anyObject))).
get();
LOG.debug("Index successfully created for {}: {}", anyObject, response);
}