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 ch...@apache.org on 2015/03/03 05:55:08 UTC
svn commit: r1663526 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/document/
main/java/org/apache/jackrabbit/oak/plugins/document/memory/
main/java/org/apache/jackrabbit/oak/plugins/document/mongo/
main/java/org/a...
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"));
+ }
}
Re: svn commit: r1663526 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/document/ main/java/org/apache/jackrabbit/oak/plugins/document/memory/
main/java/org/apache/jackrabbit/oak/plugins/document/mongo/ main/java/o...
Posted by Chetan Mehrotra <ch...@gmail.com>.
Ack. Done with http://svn.apache.org/r1663854. Further DocumentStore
now returns a map of metadata and it should not be concerned now with
how this metadata gets serialized.
Chetan Mehrotra
On Tue, Mar 3, 2015 at 8:30 PM, Marius Petria <mp...@adobe.com> wrote:
> Hi Chetan,
>
> I commented also on the issue. Probably the best approach would be to
> register a String[] such that it can be read by PropertiesUtil.toMap
> (key=value). I think is the “standard” way to represent maps in OSGI
> properties.
>
> Marius
>
>
>
>
> On 3/3/15, 8:52 AM, "Chetan Mehrotra" <ch...@gmail.com> wrote:
>
>>On Tue, Mar 3, 2015 at 12:19 PM, Julian Reschke <ju...@gmx.de>
>>wrote:
>>> This is ugly; I don't think it's a good idea to introduce JSON-shaped
>>> strings here. If we need more structure, why not a Map?
>>
>>The description has to be finally converted to string to be published
>>as string service property. So probably DocumentStore API returns a
>>Map with method name like getMetadata and then
>>DocumentNodeStoreService serializes it as a JSON string.
>>
>>Would that work?
>>
>>Chetan Mehrotra
Re: svn commit: r1663526 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/document/
main/java/org/apache/jackrabbit/oak/plugins/document/memory/
main/java/org/apache/jackrabbit/oak/plugins/document/mongo/ main/java/o...
Posted by Marius Petria <mp...@adobe.com>.
Hi Chetan,
I commented also on the issue. Probably the best approach would be to
register a String[] such that it can be read by PropertiesUtil.toMap
(key=value). I think is the “standard” way to represent maps in OSGI
properties.
Marius
On 3/3/15, 8:52 AM, "Chetan Mehrotra" <ch...@gmail.com> wrote:
>On Tue, Mar 3, 2015 at 12:19 PM, Julian Reschke <ju...@gmx.de>
>wrote:
>> This is ugly; I don't think it's a good idea to introduce JSON-shaped
>> strings here. If we need more structure, why not a Map?
>
>The description has to be finally converted to string to be published
>as string service property. So probably DocumentStore API returns a
>Map with method name like getMetadata and then
>DocumentNodeStoreService serializes it as a JSON string.
>
>Would that work?
>
>Chetan Mehrotra
Re: svn commit: r1663526 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/document/ main/java/org/apache/jackrabbit/oak/plugins/document/memory/
main/java/org/apache/jackrabbit/oak/plugins/document/mongo/ main/java/org/a...
Posted by Chetan Mehrotra <ch...@gmail.com>.
On Tue, Mar 3, 2015 at 12:19 PM, Julian Reschke <ju...@gmx.de> wrote:
> This is ugly; I don't think it's a good idea to introduce JSON-shaped
> strings here. If we need more structure, why not a Map?
The description has to be finally converted to string to be published
as string service property. So probably DocumentStore API returns a
Map with method name like getMetadata and then
DocumentNodeStoreService serializes it as a JSON string.
Would that work?
Chetan Mehrotra
Re: svn commit: r1663526 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/document/ main/java/org/apache/jackrabbit/oak/plugins/document/memory/
main/java/org/apache/jackrabbit/oak/plugins/document/mongo/ main/java/org/a...
Posted by Julian Reschke <ju...@gmx.de>.
On 2015-03-03 05:55, chetanm@apache.org wrote:
> 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
> ...
This is ugly; I don't think it's a good idea to introduce JSON-shaped
strings here. If we need more structure, why not a Map?
Best regards, Julian