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 kw...@apache.org on 2022/09/29 07:32:09 UTC

[jackrabbit-oak] 01/01: OAK-9959 allow to disable registering MBeans for every Session

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

kwin pushed a commit to branch feature/optional-session-mbean
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git

commit 4ba9458fa1d1a838958f93eb469b2860997ce7b2
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Thu Sep 29 09:32:00 2022 +0200

    OAK-9959 allow to disable registering MBeans for every Session
---
 .../main/java/org/apache/jackrabbit/oak/jcr/Jcr.java | 17 +++++++++++++++--
 .../oak/jcr/repository/RepositoryImpl.java           | 20 +++++++++++++-------
 2 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
index d11c0cc9e7..eaf91a022e 100644
--- a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
+++ b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
@@ -88,6 +88,7 @@ public class Jcr {
 
     private int observationQueueLength = DEFAULT_OBSERVATION_QUEUE_LENGTH;
     private boolean fastQueryResultSize;
+    private boolean createSessionMBeans;
 
     private ContentRepository contentRepository;
     private Repository repository;
@@ -96,7 +97,7 @@ public class Jcr {
 
     public Jcr(Oak oak, boolean initialize) {
         this.oak = oak;
-
+        createSessionMBeans = true; // by default every (long-living) session will register an MBean
         if (initialize) {
             OakDefaultComponents defs = new OakDefaultComponents();
             with(defs.securityProvider());
@@ -294,6 +295,17 @@ public class Jcr {
         return this;
     }
 
+    /**
+     * Disables registration of MBeans for every open Session in the repository.
+     * This gets rid of some overhead for cases where MBeans are not leveraged.
+     * @return the Jcr object
+     */
+    @NotNull
+    public Jcr withoutSessionMBeans() {
+        createSessionMBeans = false;
+        return this;
+    }
+
     private void setUpOak() {
         // whiteboard
         if (whiteboard != null) {
@@ -387,7 +399,8 @@ public class Jcr {
                     securityProvider,
                     observationQueueLength,
                     commitRateLimiter,
-                    fastQueryResultSize);
+                    fastQueryResultSize,
+                    createSessionMBeans);
         }
         return repository;
     }
diff --git a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
index ca57299777..363c5ce3bf 100644
--- a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
+++ b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/repository/RepositoryImpl.java
@@ -107,6 +107,7 @@ public class RepositoryImpl implements JackrabbitRepository {
 
     protected final Whiteboard whiteboard;
     protected final boolean fastQueryResultSize;
+    private final boolean createSessionMBeans;
     private final GenericDescriptors descriptors;
     private final ContentRepository contentRepository;
     private final SecurityProvider securityProvider;
@@ -147,7 +148,7 @@ public class RepositoryImpl implements JackrabbitRepository {
                           int observationQueueLength,
                           CommitRateLimiter commitRateLimiter) {
         this(contentRepository, whiteboard, securityProvider, 
-                observationQueueLength, commitRateLimiter, false);
+                observationQueueLength, commitRateLimiter, false, true);
     }
     
     public RepositoryImpl(@NotNull ContentRepository contentRepository,
@@ -155,7 +156,8 @@ public class RepositoryImpl implements JackrabbitRepository {
                           @NotNull SecurityProvider securityProvider,
                           int observationQueueLength,
                           CommitRateLimiter commitRateLimiter,
-                          boolean fastQueryResultSize) {
+                          boolean fastQueryResultSize,
+                          boolean createSessionMBeans) {
         this.contentRepository = checkNotNull(contentRepository);
         this.whiteboard = checkNotNull(whiteboard);
         this.securityProvider = checkNotNull(securityProvider);
@@ -166,6 +168,7 @@ public class RepositoryImpl implements JackrabbitRepository {
         this.clock = new Clock.Fast(scheduledExecutor);
         this.gcMonitorRegistration = whiteboard.register(GCMonitor.class, gcMonitor, emptyMap());
         this.fastQueryResultSize = fastQueryResultSize;
+        this.createSessionMBeans = createSessionMBeans;
         this.mountInfoProvider = WhiteboardUtils.getService(whiteboard, MountInfoProvider.class);
         this.blobAccessProvider = WhiteboardUtils.getService(whiteboard, BlobAccessProvider.class);
         this.frozenNodeLogger = new FrozenNodeLogger(clock, whiteboard);
@@ -318,10 +321,11 @@ public class RepositoryImpl implements JackrabbitRepository {
         return new SessionDelegate(
                 contentSession, securityProvider, refreshStrategy,
                 threadSaveCount, statisticManager, clock) {
+            
             // Defer session MBean registration to avoid cluttering the
             // JMX name space with short lived sessions
-            RegistrationTask registrationTask = new RegistrationTask(getSessionStats(), whiteboard);
-            ScheduledFuture<?> scheduledTask = scheduledExecutor.schedule(registrationTask, 1, TimeUnit.MINUTES);
+            final RegistrationTask registrationTask = createSessionMBeans ? new RegistrationTask(getSessionStats(), whiteboard) : null;
+            final ScheduledFuture<?> scheduledTask = createSessionMBeans ? scheduledExecutor.schedule(registrationTask, 1, TimeUnit.MINUTES) : null;
 
             @Override
             protected void treeLookedUpByIdentifier(@NotNull Tree tree) {
@@ -331,9 +335,11 @@ public class RepositoryImpl implements JackrabbitRepository {
             @Override
             public void logout() {
                 refreshOnGC.close();
-                // Cancel session MBean registration
-                registrationTask.cancel();
-                scheduledTask.cancel(false);
+                if (registrationTask != null) {
+                    // Cancel session MBean registration
+                    registrationTask.cancel();
+                    scheduledTask.cancel(false);
+                }
                 super.logout();
             }
         };