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 mr...@apache.org on 2017/12/05 10:56:24 UTC
svn commit: r1817174 - in /jackrabbit/oak/trunk/oak-store-document: ./
src/main/java/org/apache/jackrabbit/oak/plugins/document/
src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/
src/main/java/org/apache/jackrabbit/oak/plugins/document/m...
Author: mreutegg
Date: Tue Dec 5 10:56:23 2017
New Revision: 1817174
URL: http://svn.apache.org/viewvc?rev=1817174&view=rev
Log:
OAK-7021: Collect DocumentStore stats as part of status zip
Added:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsPrinter.java (with props)
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsPrinterTest.java (with props)
Modified:
jackrabbit/oak/trunk/oak-store-document/pom.xml
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java
Modified: jackrabbit/oak/trunk/oak-store-document/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/pom.xml?rev=1817174&r1=1817173&r2=1817174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-store-document/pom.xml Tue Dec 5 10:56:23 2017
@@ -166,6 +166,14 @@
<optional>true</optional>
</dependency>
+ <!-- Optional dependency for inventory printer -->
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.inventory</artifactId>
+ <version>1.0.4</version>
+ <optional>true</optional>
+ </dependency>
+
<!-- Required for the persistent cache -->
<dependency>
<groupId>com.h2database</groupId>
Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java?rev=1817174&r1=1817173&r2=1817174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java Tue Dec 5 10:56:23 2017
@@ -423,6 +423,19 @@ public interface DocumentStore {
Map<String, String> getMetadata();
/**
+ * Returns statistics about the underlying storage. The information and
+ * keys returned by this method are implementation specific, may change
+ * between releases or may even depend on deployment aspects. E.g. depending
+ * on access rights, the method may return more or less information from
+ * the underlying store. This method should only be used for informational
+ * or debug purposes.
+ *
+ * @return statistics about this document store.
+ */
+ @Nonnull
+ Map<String, String> getStats();
+
+ /**
* @return the estimated time difference in milliseconds between the local
* instance and the (typically common, shared) document server system. The
* value can be zero if the times are estimated to be equal, positive when
Added: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsPrinter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsPrinter.java?rev=1817174&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsPrinter.java (added)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsPrinter.java Tue Dec 5 10:56:23 2017
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.document;
+
+import java.io.PrintWriter;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+import com.google.common.base.Strings;
+
+import org.apache.felix.inventory.Format;
+import org.apache.felix.inventory.InventoryPrinter;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+
+/**
+ * Inventory printer for {@link DocumentStore#getStats()}.
+ */
+@Component(property = {
+ "felix.inventory.printer.name=oak-document-store-stats",
+ "felix.inventory.printer.title=Oak DocumentStore Statistics",
+ "felix.inventory.printer.format=TEXT"
+})
+public class DocumentStoreStatsPrinter implements InventoryPrinter {
+
+ @Reference
+ DocumentNodeStore nodeStore;
+
+ @Override
+ public void print(PrintWriter pw, Format format, boolean isZip) {
+ if (format != Format.TEXT) {
+ return;
+ }
+ DocumentStore store = nodeStore.getDocumentStore();
+ printTitle(pw, "DocumentStore metadata");
+ print(pw, store.getMetadata());
+ pw.println();
+ printTitle(pw, "DocumentStore statistics");
+ print(pw, store.getStats());
+ pw.flush();
+ }
+
+ private void printTitle(PrintWriter pw, String title) {
+ pw.println(title);
+ pw.println(Strings.repeat("=", title.length()));
+ }
+
+ private void print(PrintWriter pw, Map<String, String> data) {
+ SortedMap<String, String> sortedData = new TreeMap<>(data);
+ sortedData.forEach((k, v) -> pw.println(k + "=" + v));
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsPrinter.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java?rev=1817174&r1=1817173&r2=1817174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/memory/MemoryDocumentStore.java Tue Dec 5 10:56:23 2017
@@ -455,6 +455,17 @@ public class MemoryDocumentStore impleme
return metadata;
}
+ @Nonnull
+ @Override
+ public Map<String, String> getStats() {
+ return ImmutableMap.<String, String>builder()
+ .put(Collection.NODES.toString(), String.valueOf(nodes.size()))
+ .put(Collection.CLUSTER_NODES.toString(), String.valueOf(clusterNodes.size()))
+ .put(Collection.SETTINGS.toString(), String.valueOf(settings.size()))
+ .put(Collection.JOURNAL.toString(), String.valueOf(externalChanges.size()))
+ .build();
+ }
+
@Override
public long determineServerTimeDifferenceMillis() {
// the MemoryDocumentStore has no delays, thus return 0
Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java?rev=1817174&r1=1817173&r2=1817174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java Tue Dec 5 10:56:23 2017
@@ -1429,6 +1429,13 @@ public class MongoDocumentStore implemen
return metadata;
}
+ @Nonnull
+ @Override
+ public Map<String, String> getStats() {
+ // TODO: OAK-7028
+ return Collections.emptyMap();
+ }
+
long getMaxDeltaForModTimeIdxSecs() {
return maxDeltaForModTimeIdxSecs;
}
Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1817174&r1=1817173&r2=1817174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java Tue Dec 5 10:56:23 2017
@@ -754,6 +754,13 @@ public class RDBDocumentStore implements
return metadata;
}
+ @Nonnull
+ @Override
+ public Map<String, String> getStats() {
+ // TODO: OAK-7029
+ return Collections.emptyMap();
+ }
+
// implementation
private static final String MODIFIED = "_modified";
Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java?rev=1817174&r1=1817173&r2=1817174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LeaseCheckDocumentStoreWrapper.java Tue Dec 5 10:56:23 2017
@@ -21,6 +21,8 @@ package org.apache.jackrabbit.oak.plugin
import java.util.List;
import java.util.Map;
+import javax.annotation.Nonnull;
+
import org.apache.jackrabbit.oak.cache.CacheStats;
import org.apache.jackrabbit.oak.plugins.document.ClusterNodeInfo;
import org.apache.jackrabbit.oak.plugins.document.Collection;
@@ -199,6 +201,13 @@ public final class LeaseCheckDocumentSto
return delegate.getMetadata();
}
+ @Nonnull
+ @Override
+ public Map<String, String> getStats() {
+ performLeaseCheck();
+ return delegate.getStats();
+ }
+
@Override
public long determineServerTimeDifferenceMillis() {
performLeaseCheck();
Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java?rev=1817174&r1=1817173&r2=1817174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/LoggingDocumentStoreWrapper.java Tue Dec 5 10:56:23 2017
@@ -352,6 +352,14 @@ public class LoggingDocumentStoreWrapper
return store.getMetadata();
}
+ @Nonnull
+ @Override
+ public Map<String, String> getStats() {
+ Map<String, String> result = store.getStats();
+ logMethod("getStats", result);
+ return result;
+ }
+
@Override
public long determineServerTimeDifferenceMillis() {
logMethod("determineServerTimeDifferenceMillis", "start");
Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java?rev=1817174&r1=1817173&r2=1817174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/SynchronizingDocumentStoreWrapper.java Tue Dec 5 10:56:23 2017
@@ -155,6 +155,12 @@ public class SynchronizingDocumentStoreW
return store.getMetadata();
}
+ @Nonnull
+ @Override
+ public synchronized Map<String, String> getStats() {
+ return store.getStats();
+ }
+
@Override
public synchronized void updateAccessedRevision(RevisionVector revision, int currentClusterId) {
if (store instanceof RevisionListener) {
Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java?rev=1817174&r1=1817173&r2=1817174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/util/TimingDocumentStoreWrapper.java Tue Dec 5 10:56:23 2017
@@ -383,6 +383,19 @@ public class TimingDocumentStoreWrapper
return base.getMetadata();
}
+ @Nonnull
+ @Override
+ public Map<String, String> getStats() {
+ try {
+ long start = now();
+ Map<String, String> result = base.getStats();
+ updateAndLogTimes("getStats", start, 0, 0);
+ return result;
+ } catch (Exception e) {
+ throw convert(e);
+ }
+ }
+
@Override
public long determineServerTimeDifferenceMillis() {
try {
Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java?rev=1817174&r1=1817173&r2=1817174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/CountingDocumentStore.java Tue Dec 5 10:56:23 2017
@@ -224,6 +224,12 @@ public class CountingDocumentStore imple
return delegate.getMetadata();
}
+ @Nonnull
+ @Override
+ public Map<String, String> getStats() {
+ return delegate.getStats();
+ }
+
@Override
public long determineServerTimeDifferenceMillis() {
return delegate.determineServerTimeDifferenceMillis();
Added: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsPrinterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsPrinterTest.java?rev=1817174&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsPrinterTest.java (added)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsPrinterTest.java Tue Dec 5 10:56:23 2017
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.document;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.List;
+
+import org.apache.felix.inventory.Format;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static java.util.Arrays.asList;
+import static org.apache.commons.lang.StringUtils.split;
+import static org.hamcrest.Matchers.hasItem;
+import static org.junit.Assert.assertThat;
+
+public class DocumentStoreStatsPrinterTest {
+
+ @Rule
+ public DocumentMKBuilderProvider builderProvider = new DocumentMKBuilderProvider();
+
+ @Test
+ public void printStats() {
+ DocumentNodeStore ns = builderProvider.newBuilder().getNodeStore();
+ DocumentStoreStatsPrinter printer = new DocumentStoreStatsPrinter();
+ printer.nodeStore = ns;
+
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ printer.print(pw, Format.TEXT, false);
+
+ List<String> lines = asList(split(sw.toString(),"\r\n"));
+ assertThat(lines, hasItem("type=memory"));
+ assertThat(lines, hasItem("nodes=1"));
+ assertThat(lines, hasItem("clusterNodes=1"));
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreStatsPrinterTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java?rev=1817174&r1=1817173&r2=1817174&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreWrapper.java Tue Dec 5 10:56:23 2017
@@ -160,6 +160,12 @@ public class DocumentStoreWrapper implem
return store.getMetadata();
}
+ @Nonnull
+ @Override
+ public Map<String, String> getStats() {
+ return store.getStats();
+ }
+
@Override
public long determineServerTimeDifferenceMillis() {
return store.determineServerTimeDifferenceMillis();