diff --git a/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java b/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java index 4bbd44c..265baa9 100644 --- a/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java +++ b/oak-api/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java @@ -169,6 +169,15 @@ public interface RepositoryManagementMBean { 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. * diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java index db338e0..08a7a6a 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java @@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.management; 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.commons.jmx.ManagementOperation.Status.s 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 AnnotatedStandardMBean implements Reposit } private Status execute(Class serviceType, Function operation) { - Tracker tracker = whiteboard.track(serviceType); + return execute(serviceType, operation, Collections.emptyMap()); + } + + private Status execute(Class serviceType, Function operation, Map filter) { + Tracker tracker; + if (filter.isEmpty()) { + tracker = whiteboard.track(serviceType); + } else { + tracker = whiteboard.track(serviceType, filter); + } try { List services = tracker.getServices(); if (services.size() == 1) { @@ -165,13 +177,18 @@ public class RepositoryManager extends AnnotatedStandardMBean implements Reposit @Override public CompositeData startRevisionGC() { + return startRevisionGCForRole(null); + } + + @Override + public CompositeData startRevisionGCForRole(String role) { return execute(RevisionGCMBean.class, new Function() { @Nonnull @Override public Status apply(RevisionGCMBean revisionGCService) { return fromCompositeData(revisionGCService.startRevisionGC()); } - }).toCompositeData(); + }, singletonMap("role", role)).toCompositeData(); } @Nonnull