Author: chetanm
Date: Tue Mar 3 04:55:07 2015
New Revision: 1663526
URL: http://svn.apache.org/r1663526
Log:
OAK-2499 - Expose mongo and db versions for reporting purposes
Applying a modified patch from Marius. The description is now a JSON string
capturing required metadata attribute
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java?rev=1663526&r1=1663525&r2=1663526&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
Tue Mar 3 04:55:07 2015
@@ -92,6 +92,7 @@ public class DocumentNodeStoreService {
private static final String DEFAULT_DB = "oak";
private static final String DEFAULT_PERSISTENT_CACHE = "";
private static final String PREFIX = "oak.documentstore.";
+ private static final String DESCRIPTION = "oak.nodestore.description";
/**
* Name of framework property to configure Mongo Connection URI
@@ -340,8 +341,11 @@ public class DocumentNodeStoreService {
observerTracker.start(context.getBundleContext());
+ DocumentStore ds = mk.getDocumentStore();
+
Dictionary<String, String> props = new Hashtable<String, String>();
props.put(Constants.SERVICE_PID, DocumentNodeStore.class.getName());
+ props.put(DESCRIPTION, ds.getDescription());
reg =
context.getBundleContext().registerService(NodeStore.class.getName(), store,
props);
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java?rev=1663526&r1=1663525&r2=1663526&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
Tue Mar 3 04:55:07 2015
@@ -251,4 +251,9 @@ public interface DocumentStore {
*/
@CheckForNull
CacheStats getCacheStats();
+
+ /**
+ * @return description of the underlying storage.
+ */
+ String getDescription();
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java?rev=1663526&r1=1663525&r2=1663526&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
Tue Mar 3 04:55:07 2015
@@ -28,7 +28,6 @@ import java.util.concurrent.locks.Reentr
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
-import javax.jcr.RepositoryException;
import org.apache.jackrabbit.oak.cache.CacheStats;
import org.apache.jackrabbit.oak.plugins.document.Collection;
@@ -349,4 +348,9 @@ public class MemoryDocumentStore impleme
return null;
}
+ @Override
+ public String getDescription() {
+ return "{\"type\":\"memory\"}";
+ }
+
}
\ No newline at end of file
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java?rev=1663526&r1=1663525&r2=1663526&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
Tue Mar 3 04:55:07 2015
@@ -44,6 +44,7 @@ import com.mongodb.ReadPreference;
import org.apache.jackrabbit.oak.cache.CacheStats;
import org.apache.jackrabbit.oak.cache.CacheValue;
+import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
import org.apache.jackrabbit.oak.plugins.document.CachedNodeDocument;
import org.apache.jackrabbit.oak.plugins.document.Collection;
import org.apache.jackrabbit.oak.plugins.document.Document;
@@ -153,8 +154,12 @@ public class MongoDocumentStore implemen
private String lastReadWriteMode;
+ private final String dbDescription;
+
public MongoDocumentStore(DB db, DocumentMK.Builder builder) {
- checkVersion(db);
+ String version = checkVersion(db);
+ dbDescription = String.format("{\"type\":\"mongo\",\"version\":%s}",
JsopBuilder.encode(version));
+
nodes = db.getCollection(
Collection.NODES.toString());
clusterNodes = db.getCollection(
@@ -209,7 +214,7 @@ public class MongoDocumentStore implemen
"maxDeltaForModTimeIdxSecs {}",maxReplicationLagMillis,
maxDeltaForModTimeIdxSecs);
}
- private static void checkVersion(DB db) {
+ private static String checkVersion(DB db) {
String version = db.command("buildInfo").getString("version");
Matcher m = Pattern.compile("^(\\d+)\\.(\\d+)\\..*").matcher(version);
if (!m.matches()) {
@@ -218,13 +223,15 @@ public class MongoDocumentStore implemen
int major = Integer.parseInt(m.group(1));
int minor = Integer.parseInt(m.group(2));
if (major > 2) {
- return;
+ return version;
}
if (minor < 6) {
String msg = "MongoDB version 2.6.0 or higher required. " +
"Currently connected to a MongoDB with version: " +
version;
throw new RuntimeException(msg);
}
+
+ return version;
}
private Cache<CacheValue, NodeDocument> createOffHeapCache(
@@ -922,6 +929,11 @@ public class MongoDocumentStore implemen
return cacheStats;
}
+ @Override
+ public String getDescription() {
+ return dbDescription;
+ }
+
long getMaxDeltaForModTimeIdxSecs() {
return maxDeltaForModTimeIdxSecs;
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1663526&r1=1663525&r2=1663526&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
Tue Mar 3 04:55:07 2015
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.oak.plugins.document.rdb;
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.commons.json.JsopBuilder.encode;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -333,6 +334,11 @@ public class RDBDocumentStore implements
return this.cacheStats;
}
+ @Override
+ public String getDescription() {
+ return dbDescription;
+ }
+
// implementation
enum FETCHFIRSTSYNTAX { FETCHFIRST, LIMIT, TOP};
@@ -561,6 +567,8 @@ public class RDBDocumentStore implements
// DB-specific information
private DB db;
+ private String dbDescription;
+
// set of supported indexed properties
private static final Set<String> INDEXEDPROPERTIES = new
HashSet<String>(Arrays.asList(new String[] { MODIFIED,
NodeDocument.HAS_BINARY_FLAG, NodeDocument.DELETED_ONCE }));
@@ -590,6 +598,9 @@ public class RDBDocumentStore implements
String driverDesc = md.getDriverName() + " " + md.getDriverVersion();
this.db = DB.getValue(md.getDatabaseProductName());
+ this.dbDescription =
String.format("{\"type\":\"rdb\",\"db\":%s,\"version\":%s}",
+ encode(md.getDatabaseProductName()),
+ encode(md.getDatabaseProductVersion()));
if (! "".equals(db.getInitializationStatement())) {
Statement stmt = con.createStatement();
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java?rev=1663526&r1=1663525&r2=1663526&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
Tue Mar 3 04:55:07 2015
@@ -296,6 +296,11 @@ public class LoggingDocumentStoreWrapper
}
}
+ @Override
+ public String getDescription() {
+ return store.getDescription();
+ }
+
private void logMethod(String methodName, Object... args) {
StringBuilder buff = new StringBuilder("ds");
buff.append('.').append(methodName).append('(');
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java?rev=1663526&r1=1663525&r2=1663526&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java
Tue Mar 3 04:55:07 2015
@@ -125,4 +125,9 @@ public class SynchronizingDocumentStoreW
public synchronized CacheStats getCacheStats() {
return store.getCacheStats();
}
+
+ @Override
+ public String getDescription() {
+ return store.getDescription();
+ }
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java?rev=1663526&r1=1663525&r2=1663526&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
Tue Mar 3 04:55:07 2015
@@ -317,6 +317,11 @@ public class TimingDocumentStoreWrapper
}
}
+ @Override
+ public String getDescription() {
+ return base.getDescription();
+ }
+
private void logCommonCall(long start, String key) {
int time = (int) (System.currentTimeMillis() - start);
if (time <= 0) {
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java?rev=1663526&r1=1663525&r2=1663526&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
Tue Mar 3 04:55:07 2015
@@ -37,6 +37,8 @@ import java.util.Map;
import java.util.Set;
import java.util.UUID;
+import org.apache.jackrabbit.oak.commons.json.JsonObject;
+import org.apache.jackrabbit.oak.commons.json.JsopTokenizer;
import org.apache.jackrabbit.oak.plugins.document.mongo.MongoDocumentStore;
import org.junit.Assume;
import org.junit.Test;
@@ -955,4 +957,14 @@ public class BasicDocumentStoreTest exte
assertTrue(cmc2.longValue() == cmc3.longValue());
}
}
+
+ @Test
+ public void description() throws Exception{
+ String desc = ds.getDescription();
+ System.out.println(desc);
+ JsopTokenizer t = new JsopTokenizer(desc);
+ t.read('{');
+ JsonObject json = JsonObject.create(t);
+ assertNotNull(json.getProperties().get("type"));
+ }
}