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 an...@apache.org on 2016/05/11 16:01:17 UTC
svn commit: r1743391 - in /jackrabbit/oak/trunk/oak-auth-external/src:
main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/
test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/
Author: angela
Date: Wed May 11 16:01:17 2016
New Revision: 1743391
URL: http://svn.apache.org/viewvc?rev=1743391&view=rev
Log:
OAK-4362 : SyncMBeanImpl.purgeOrphanedUsers swallows sync-error
Modified:
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/Delegatee.java
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.java
Modified: jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/Delegatee.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/Delegatee.java?rev=1743391&r1=1743390&r2=1743391&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/Delegatee.java (original)
+++ jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/Delegatee.java Wed May 11 16:01:17 2016
@@ -22,11 +22,15 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.security.auth.Subject;
+import com.google.common.base.Function;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterators;
import org.apache.jackrabbit.api.JackrabbitRepository;
import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.jackrabbit.api.security.user.UserManager;
@@ -239,27 +243,7 @@ final class Delegatee {
*/
@Nonnull
String[] listOrphanedUsers() {
- List<String> list = new ArrayList<String>();
- try {
- Iterator<SyncedIdentity> iter = handler.listIdentities(userMgr);
- while (iter.hasNext()) {
- SyncedIdentity id = iter.next();
- if (isMyIDP(id)) {
- try {
- ExternalIdentityRef ref = id.getExternalIdRef();
- ExternalIdentity extId = (ref == null) ? null : idp.getIdentity(ref);
- if (extId == null) {
- list.add(id.getId());
- }
- } catch (ExternalIdentityException e) {
- log.error("Error while fetching external identity {}", id, e);
- }
- }
- }
- } catch (RepositoryException e) {
- log.error("Error while listing orphaned users", e);
- }
- return list.toArray(new String[list.size()]);
+ return Iterators.toArray(internalListOrphanedIdentities(), String.class);
}
/**
@@ -269,11 +253,14 @@ final class Delegatee {
String[] purgeOrphanedUsers() {
context.setKeepMissing(false);
List<String> list = new ArrayList<String>();
- for (String userId : listOrphanedUsers()) {
+ Iterator<String> orphanedIdentities = internalListOrphanedIdentities();
+ while (orphanedIdentities.hasNext()) {
+ String userId = orphanedIdentities.next();
try {
append(list, syncUser(userId));
} catch (SyncException e) {
log.warn(ERROR_SYNC_USER, userId, e);
+ append(list, new DefaultSyncedIdentity(userId, new ExternalIdentityRef(userId, idp.getName()), false, -1), e);
}
}
return list.toArray(new String[list.size()]);
@@ -310,6 +297,34 @@ final class Delegatee {
}
}
+ @Nonnull
+ private Iterator<String> internalListOrphanedIdentities() {
+ try {
+ Iterator<SyncedIdentity> iter = handler.listIdentities(userMgr);
+ return Iterators.filter(Iterators.transform(iter, new Function<SyncedIdentity, String>() {
+ @Nullable
+ @Override
+ public String apply(@Nullable SyncedIdentity syncedIdentity) {
+ if (syncedIdentity != null && isMyIDP(syncedIdentity)) {
+ ExternalIdentityRef ref = syncedIdentity.getExternalIdRef();
+ try {
+ ExternalIdentity extId = (ref == null) ? null : idp.getIdentity(ref);
+ if (extId == null) {
+ return syncedIdentity.getId();
+ }
+ } catch (ExternalIdentityException e) {
+ log.error("Error while fetching external identity {}", syncedIdentity, e);
+ }
+ }
+ return null;
+ }
+ }), Predicates.notNull());
+ } catch (RepositoryException e) {
+ log.error("Error while listing orphaned users", e);
+ return Iterators.emptyIterator();
+ }
+ }
+
private static void append(@Nonnull List<String> list, @Nonnull SyncResult r) {
SyncedIdentity syncedIdentity = r.getIdentity();
String uid = JsonUtil.getJsonString((syncedIdentity == null ? null : syncedIdentity.getId()));
Modified: jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.java?rev=1743391&r1=1743390&r2=1743391&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/jmx/SyncMBeanImplTest.java Wed May 11 16:01:17 2016
@@ -61,7 +61,6 @@ import org.apache.jackrabbit.oak.spi.sec
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
@@ -821,7 +820,6 @@ public class SyncMBeanImplTest {
/**
* @see <a href="https://issues.apache.org/jira/browse/OAK-4362">OAK-4362</a>
*/
- @Ignore("OAK-4362")
@Test
public void testPurgeOrphanedUsersThrowingHandler2() throws Exception {
sync(new TestIdentityProvider.TestUser("thirdUser", idp.getName()), idp);