Author: tomekr
Date: Thu Jun  8 07:10:29 2017
New Revision: 1798026

URL: http://svn.apache.org/viewvc?rev=1798026&view=rev
Log:
OAK-5309: Supporting roles in RepositoryManager execution of maintenance tasks

Modified:
    
jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java

Modified: 
jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java?rev=1798026&r1=1798025&r2=1798026&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java
 Thu Jun  8 07:10:29 2017
@@ -169,6 +169,15 @@ public interface RepositoryManagementMBe
     CompositeData startRevisionGC();
 
     /**
+     * Initiate a revision garbage collection operation
+     *
+     * @return  the status of the operation right after it was initiated
+     */
+    @Nonnull
+    @Description("Initiates a revision garbage collection operation for a 
given role")
+    CompositeData startRevisionGCForRole(String role);
+
+    /**
      * Cancel a running revision garbage collection operation. Does nothing
      * if revision garbage collection is not running.
      *

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java?rev=1798026&r1=1798025&r2=1798026&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java
 Thu Jun  8 07:10:29 2017
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.manage
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.Lists.newArrayList;
+import static java.util.Collections.singletonMap;
 import static org.apache.jackrabbit.oak.commons.jmx.ManagementOperation.Status;
 import static 
org.apache.jackrabbit.oak.commons.jmx.ManagementOperation.Status.failed;
 import static 
org.apache.jackrabbit.oak.commons.jmx.ManagementOperation.Status.fromCompositeData;
@@ -28,7 +29,9 @@ import static org.apache.jackrabbit.oak.
 import static 
org.apache.jackrabbit.oak.commons.jmx.ManagementOperation.Status.toTabularData;
 import static 
org.apache.jackrabbit.oak.commons.jmx.ManagementOperation.Status.unavailable;
 
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 
 import javax.annotation.Nonnull;
 import javax.management.openmbean.CompositeData;
@@ -65,7 +68,16 @@ public class RepositoryManager extends A
     }
 
     private <T> Status execute(Class<T> serviceType, Function<T, Status> 
operation) {
-        Tracker<T> tracker = whiteboard.track(serviceType);
+        return execute(serviceType, operation, Collections.emptyMap());
+    }
+
+    private <T> Status execute(Class<T> serviceType, Function<T, Status> 
operation, Map<String, String> filter) {
+        Tracker<T> tracker;
+        if (filter.isEmpty()) {
+            tracker = whiteboard.track(serviceType);
+        } else {
+            tracker = whiteboard.track(serviceType, filter);
+        }
         try {
             List<T> services = tracker.getServices();
             if (services.size() == 1) {
@@ -165,13 +177,18 @@ public class RepositoryManager extends A
 
     @Override
     public CompositeData startRevisionGC() {
+        return startRevisionGCForRole(null);
+    }
+
+    @Override
+    public CompositeData startRevisionGCForRole(String role) {
         return execute(RevisionGCMBean.class, new Function<RevisionGCMBean, 
Status>() {
             @Nonnull
             @Override
             public Status apply(RevisionGCMBean revisionGCService) {
                 return fromCompositeData(revisionGCService.startRevisionGC());
             }
-        }).toCompositeData();
+        }, singletonMap("role", role)).toCompositeData();
     }
 
     @Nonnull


Reply via email to