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