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 vh...@apache.org on 2020/09/17 10:03:56 UTC
svn commit: r1881788 - in /jackrabbit/oak/branches/1.22/oak-core/src:
main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java
test/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImplTest.java
Author: vholani
Date: Thu Sep 17 10:03:56 2020
New Revision: 1881788
URL: http://svn.apache.org/viewvc?rev=1881788&view=rev
Log:
OAK-9200 - Oak BlobAccessProvider reference in UserConfigurationImpl fails and leads to performance issue as it goes every time to get the service object. (backported from trunk commit 1881787)
Modified:
jackrabbit/oak/branches/1.22/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java
jackrabbit/oak/branches/1.22/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImplTest.java
Modified: jackrabbit/oak/branches/1.22/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.22/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java?rev=1881788&r1=1881787&r2=1881788&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.22/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java (original)
+++ jackrabbit/oak/branches/1.22/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImpl.java Thu Sep 17 10:03:56 2020
@@ -54,6 +54,7 @@ import org.osgi.service.component.annota
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
import org.osgi.service.metatype.annotations.AttributeDefinition;
import org.osgi.service.metatype.annotations.Designate;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
@@ -191,8 +192,17 @@ public class UserConfigurationImpl exten
setParameters(ConfigurationParameters.of(properties));
}
- @Reference(cardinality = ReferenceCardinality.OPTIONAL)
private BlobAccessProvider blobAccessProvider;
+
+ @Reference(cardinality = ReferenceCardinality.OPTIONAL,
+ policy = ReferencePolicy.DYNAMIC)
+ void bindBlobAccessProvider(BlobAccessProvider bap) {
+ blobAccessProvider = bap;
+ }
+
+ void unbindBlobAccessProvider(BlobAccessProvider bap) {
+ blobAccessProvider = DEFAULT_BLOB_ACCESS_PROVIDER;
+ }
//----------------------------------------------< SecurityConfiguration >---
@NotNull
@@ -262,9 +272,7 @@ public class UserConfigurationImpl exten
public PrincipalProvider getUserPrincipalProvider(@NotNull Root root, @NotNull NamePathMapper namePathMapper) {
return new UserPrincipalProvider(root, this, namePathMapper);
}
-
- //-----------------------------------------------------------< internal >---
-
+
@NotNull
private BlobAccessProvider getBlobAccessProvider() {
BlobAccessProvider provider = blobAccessProvider;
@@ -279,8 +287,8 @@ public class UserConfigurationImpl exten
}
if (provider == null) {
provider = DEFAULT_BLOB_ACCESS_PROVIDER;
- blobAccessProvider = provider;
}
+ blobAccessProvider = provider;
return provider;
}
}
Modified: jackrabbit/oak/branches/1.22/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.22/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImplTest.java?rev=1881788&r1=1881787&r2=1881788&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.22/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImplTest.java (original)
+++ jackrabbit/oak/branches/1.22/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserConfigurationImplTest.java Thu Sep 17 10:03:56 2020
@@ -20,6 +20,7 @@ import com.google.common.collect.Immutab
import com.google.common.collect.Lists;
import org.apache.jackrabbit.api.security.user.UserManager;
import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import org.apache.jackrabbit.oak.api.blob.BlobAccessProvider;
import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
import org.apache.jackrabbit.oak.spi.commit.MoveTracker;
import org.apache.jackrabbit.oak.spi.commit.ThreeWayConflictHandler;
@@ -35,11 +36,13 @@ import org.apache.jackrabbit.oak.spi.xml
import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
import org.junit.Rule;
import org.junit.Test;
+import org.osgi.framework.ServiceRegistration;
import java.lang.reflect.Field;
import java.security.Principal;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Hashtable;
import java.util.List;
import static org.apache.jackrabbit.oak.spi.security.user.UserConstants.PARAM_DEFAULT_DEPTH;
@@ -139,6 +142,29 @@ public class UserConfigurationImplTest e
f.setAccessible(true);
assertSame(PartialValueFactory.DEFAULT_BLOB_ACCESS_PROVIDER, f.get(vf));
}
+
+ @Test
+ public void testBindBlobAccessProvider() throws Exception {
+ UserConfigurationImpl uc = new UserConfigurationImpl(getSecurityProvider());
+ context.registerInjectActivateService(uc, ImmutableMap.of(PARAM_DEFAULT_DEPTH, "8"));
+
+ BlobAccessProvider bap = mock(BlobAccessProvider.class);
+ uc.getUserManager(root, getNamePathMapper());
+ Field f = UserConfigurationImpl.class.getDeclaredField("blobAccessProvider");
+ f.setAccessible(true);
+ //Validate default service
+ assertSame(PartialValueFactory.DEFAULT_BLOB_ACCESS_PROVIDER, f.get(uc));
+
+ ServiceRegistration reg = context.bundleContext().registerService(
+ BlobAccessProvider.class.getName(),
+ bap, new Hashtable<String, Object>());
+ //Validate newly registered service
+ assertSame(bap, f.get(uc));
+
+ reg.unregister();
+ //Validate default service after unregistering newly registered service
+ assertSame(PartialValueFactory.DEFAULT_BLOB_ACCESS_PROVIDER, f.get(uc));
+ }
@Test
public void testUserConfigurationWithConstructor() {