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 md...@apache.org on 2014/11/20 22:02:37 UTC
svn commit: r1640811 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
plugins/document/DocumentCheckpointMBean.java
plugins/segment/SegmentCheckpointMBean.java util/AbstractCheckpointMBean.java
Author: mduerig
Date: Thu Nov 20 21:02:37 2014
New Revision: 1640811
URL: http://svn.apache.org/r1640811
Log:
OAK-2267: Expose checkpoints through JMX
Factor common parts between implementations into base class
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/AbstractCheckpointMBean.java
- copied, changed from r1640810, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCheckpointMBean.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentCheckpointMBean.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCheckpointMBean.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentCheckpointMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentCheckpointMBean.java?rev=1640811&r1=1640810&r2=1640811&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentCheckpointMBean.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentCheckpointMBean.java Thu Nov 20 21:02:37 2014
@@ -24,39 +24,15 @@ import java.util.Date;
import java.util.Map;
import java.util.Map.Entry;
-import javax.management.openmbean.CompositeDataSupport;
-import javax.management.openmbean.CompositeType;
import javax.management.openmbean.OpenDataException;
-import javax.management.openmbean.OpenType;
-import javax.management.openmbean.SimpleType;
-import javax.management.openmbean.TabularData;
import javax.management.openmbean.TabularDataSupport;
-import javax.management.openmbean.TabularType;
-import org.apache.jackrabbit.oak.api.jmx.CheckpointMBean;
+import org.apache.jackrabbit.oak.util.AbstractCheckpointMBean;
/**
* {@code CheckpointMBean} implementation for the {@code DocumentNodeStore}.
*/
-public class DocumentCheckpointMBean implements CheckpointMBean {
- private static final String[] FIELD_NAMES = new String[] { "id", "created", "expires"};
- private static final String[] FIELD_DESCRIPTIONS = FIELD_NAMES;
-
- @SuppressWarnings("rawtypes")
- private static final OpenType[] FIELD_TYPES = new OpenType[] {
- SimpleType.STRING, SimpleType.STRING, SimpleType.STRING };
-
- private static final CompositeType TYPE = createCompositeType();
-
- private static CompositeType createCompositeType() {
- try {
- return new CompositeType(DocumentCheckpointMBean.class.getName(),
- "Checkpoints", FIELD_NAMES, FIELD_DESCRIPTIONS, FIELD_TYPES);
- } catch (OpenDataException e) {
- throw new IllegalStateException(e);
- }
- }
-
+public class DocumentCheckpointMBean extends AbstractCheckpointMBean {
private final DocumentNodeStore store;
public DocumentCheckpointMBean(DocumentNodeStore store) {
@@ -64,35 +40,20 @@ public class DocumentCheckpointMBean imp
}
@Override
- public TabularData listCheckpoints() {
+ protected void collectCheckpoints(TabularDataSupport tab) throws OpenDataException {
Map<Revision, String> checkpoints = store.getCheckpoints().getCheckpoints();
if (checkpoints == null) {
checkpoints = Collections.emptyMap();
}
- try {
- TabularDataSupport tab = new TabularDataSupport(
- new TabularType(DocumentCheckpointMBean.class.getName(),
- "Checkpoints", TYPE, new String[] { "id" }));
-
- for (Entry<Revision, String> checkpoint : checkpoints.entrySet()) {
- String id = checkpoint.getKey().toString();
- Date created = new Date(checkpoint.getKey().getTimestamp());
- Date expires = new Date(Long.parseLong(checkpoint.getValue()));
- tab.put(id, toCompositeData(id, created.toString(), expires.toString()));
- }
-
- return tab;
- } catch (OpenDataException e) {
- throw new IllegalStateException(e);
+ for (Entry<Revision, String> checkpoint : checkpoints.entrySet()) {
+ String id = checkpoint.getKey().toString();
+ Date created = new Date(checkpoint.getKey().getTimestamp());
+ Date expires = new Date(Long.parseLong(checkpoint.getValue()));
+ tab.put(id, toCompositeData(id, created.toString(), expires.toString()));
}
}
- private static CompositeDataSupport toCompositeData(String id, String created, String expires)
- throws OpenDataException {
- return new CompositeDataSupport(TYPE, FIELD_NAMES, new String[] { id, created, expires });
- }
-
@Override
public String createCheckpoint(long lifetime) {
return store.checkpoint(lifetime);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCheckpointMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCheckpointMBean.java?rev=1640811&r1=1640810&r2=1640811&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCheckpointMBean.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCheckpointMBean.java Thu Nov 20 21:02:37 2014
@@ -21,43 +21,19 @@ package org.apache.jackrabbit.oak.plugin
import java.util.Date;
-import javax.management.openmbean.CompositeDataSupport;
-import javax.management.openmbean.CompositeType;
import javax.management.openmbean.OpenDataException;
-import javax.management.openmbean.OpenType;
-import javax.management.openmbean.SimpleType;
-import javax.management.openmbean.TabularData;
import javax.management.openmbean.TabularDataSupport;
-import javax.management.openmbean.TabularType;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.api.jmx.CheckpointMBean;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.util.AbstractCheckpointMBean;
/**
* {@code CheckpointMBean} implementation for the {@code SegmentNodeStore}.
*/
-public class SegmentCheckpointMBean implements CheckpointMBean {
- private static final String[] FIELD_NAMES = new String[] { "id", "created", "expires"};
- private static final String[] FIELD_DESCRIPTIONS = FIELD_NAMES;
-
- @SuppressWarnings("rawtypes")
- private static final OpenType[] FIELD_TYPES = new OpenType[] {
- SimpleType.STRING, SimpleType.STRING, SimpleType.STRING };
-
- private static final CompositeType TYPE = createCompositeType();
-
- private static CompositeType createCompositeType() {
- try {
- return new CompositeType(SegmentCheckpointMBean.class.getName(),
- "Checkpoints", FIELD_NAMES, FIELD_DESCRIPTIONS, FIELD_TYPES);
- } catch (OpenDataException e) {
- throw new IllegalStateException(e);
- }
- }
-
+public class SegmentCheckpointMBean extends AbstractCheckpointMBean {
private final SegmentNodeStore store;
public SegmentCheckpointMBean(SegmentNodeStore store) {
@@ -65,33 +41,16 @@ public class SegmentCheckpointMBean impl
}
@Override
- public TabularData listCheckpoints() {
- NodeState checkpoints = store.getCheckpoints();
-
- try {
- TabularDataSupport tab = new TabularDataSupport(
- new TabularType(SegmentCheckpointMBean.class.getName(),
- "Checkpoints", TYPE, new String[] { "id" }));
-
- for (ChildNodeEntry cne : checkpoints.getChildNodeEntries()) {
- String id = cne.getName();
- NodeState checkpoint = cne.getNodeState();
- String created = getDate(checkpoint, "created");
- String expires = getDate(checkpoint, "timestamp");
- tab.put(id, toCompositeData(id, created, expires));
- }
-
- return tab;
- } catch (OpenDataException e) {
- throw new IllegalStateException(e);
+ protected void collectCheckpoints(TabularDataSupport tab) throws OpenDataException {
+ for (ChildNodeEntry cne : store.getCheckpoints().getChildNodeEntries()) {
+ String id = cne.getName();
+ NodeState checkpoint = cne.getNodeState();
+ String created = getDate(checkpoint, "created");
+ String expires = getDate(checkpoint, "timestamp");
+ tab.put(id, toCompositeData(id, created, expires));
}
}
- private static CompositeDataSupport toCompositeData(String id, String created, String expires)
- throws OpenDataException {
- return new CompositeDataSupport(TYPE, FIELD_NAMES, new String[] { id, created, expires });
- }
-
private static String getDate(NodeState checkpoint, String name) {
PropertyState p = checkpoint.getProperty(name);
if (p == null) {
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/AbstractCheckpointMBean.java (from r1640810, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCheckpointMBean.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/AbstractCheckpointMBean.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/AbstractCheckpointMBean.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCheckpointMBean.java&r1=1640810&r2=1640811&rev=1640811&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentCheckpointMBean.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/util/AbstractCheckpointMBean.java Thu Nov 20 21:02:37 2014
@@ -17,9 +17,7 @@
* under the License.
*/
-package org.apache.jackrabbit.oak.plugins.segment;
-
-import java.util.Date;
+package org.apache.jackrabbit.oak.util;
import javax.management.openmbean.CompositeDataSupport;
import javax.management.openmbean.CompositeType;
@@ -30,16 +28,15 @@ import javax.management.openmbean.Tabula
import javax.management.openmbean.TabularDataSupport;
import javax.management.openmbean.TabularType;
-import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.api.jmx.CheckpointMBean;
-import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
-import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.plugins.segment.SegmentCheckpointMBean;
/**
- * {@code CheckpointMBean} implementation for the {@code SegmentNodeStore}.
+ * Abstract base class for {@code CheckpointMBean} implementations.
+ * This class provides the basic functionality for converting checkpoints
+ * into tabular data.
*/
-public class SegmentCheckpointMBean implements CheckpointMBean {
+public abstract class AbstractCheckpointMBean implements CheckpointMBean {
private static final String[] FIELD_NAMES = new String[] { "id", "created", "expires"};
private static final String[] FIELD_DESCRIPTIONS = FIELD_NAMES;
@@ -58,28 +55,26 @@ public class SegmentCheckpointMBean impl
}
}
- private final SegmentNodeStore store;
-
- public SegmentCheckpointMBean(SegmentNodeStore store) {
- this.store = store;
- }
+ /**
+ * Called to collect the tabular data for the checkpoints.
+ * Each checkpoint should be represented by a single row in {@code tab}.
+ * Implementors should use the {@link #toCompositeData} utility method for converting
+ * the individual fields associated with a checkpoint into the correct composite data
+ * format.
+ *
+ * @param tab
+ * @throws OpenDataException
+ */
+ protected abstract void collectCheckpoints(TabularDataSupport tab) throws OpenDataException;
@Override
public TabularData listCheckpoints() {
- NodeState checkpoints = store.getCheckpoints();
-
try {
TabularDataSupport tab = new TabularDataSupport(
new TabularType(SegmentCheckpointMBean.class.getName(),
"Checkpoints", TYPE, new String[] { "id" }));
- for (ChildNodeEntry cne : checkpoints.getChildNodeEntries()) {
- String id = cne.getName();
- NodeState checkpoint = cne.getNodeState();
- String created = getDate(checkpoint, "created");
- String expires = getDate(checkpoint, "timestamp");
- tab.put(id, toCompositeData(id, created, expires));
- }
+ collectCheckpoints(tab);
return tab;
} catch (OpenDataException e) {
@@ -87,28 +82,20 @@ public class SegmentCheckpointMBean impl
}
}
- private static CompositeDataSupport toCompositeData(String id, String created, String expires)
+ /**
+ * Utility method for converting the fields associated with a checkpoint to the
+ * composite data format.
+ *
+ * @param id id of the checkpoint
+ * @param created creation data of the checkpoint
+ * @param expires expiry data of the checkpoint
+ * @return composite data representation of the fields associated with the
+ * checkpoint
+ * @throws OpenDataException
+ */
+ protected static CompositeDataSupport toCompositeData(String id, String created, String expires)
throws OpenDataException {
return new CompositeDataSupport(TYPE, FIELD_NAMES, new String[] { id, created, expires });
}
- private static String getDate(NodeState checkpoint, String name) {
- PropertyState p = checkpoint.getProperty(name);
- if (p == null) {
- return "NA";
- }
-
- return new Date(p.getValue(Type.LONG)).toString();
- }
-
- @Override
- public String createCheckpoint(long lifetime) {
- return store.checkpoint(lifetime);
- }
-
- @Override
- public boolean releaseCheckpoint(String checkpoint) {
- return store.release(checkpoint);
- }
-
}