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);