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 js...@apache.org on 2015/10/04 15:18:29 UTC
svn commit: r1706674 - in /jackrabbit/oak/trunk/oak-upgrade: ./
src/main/java/org/apache/jackrabbit/oak/upgrade/
src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
Author: jsedding
Date: Sun Oct 4 13:18:29 2015
New Revision: 1706674
URL: http://svn.apache.org/viewvc?rev=1706674&view=rev
Log:
OAK-3460 - Progress logging for RepositorySidegrade
- implemented ReportingNodeState wrapper in order to be able to log each NodeState access
Added:
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/LoggingReporter.java (with props)
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporter.java (with props)
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/Reporter.java (with props)
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeState.java (with props)
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/AssertingPeriodicReporter.java (with props)
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporterTest.java (with props)
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeStateTest.java (with props)
Modified:
jackrabbit/oak/trunk/oak-upgrade/pom.xml
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
Modified: jackrabbit/oak/trunk/oak-upgrade/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/pom.xml?rev=1706674&r1=1706673&r2=1706674&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-upgrade/pom.xml Sun Oct 4 13:18:29 2015
@@ -134,6 +134,12 @@
<!-- Test Dependencies -->
<dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-all</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java?rev=1706674&r1=1706673&r2=1706674&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java Sun Oct 4 13:18:29 2015
@@ -94,15 +94,6 @@ class JackrabbitNodeState extends Abstra
private static final Logger log =
LoggerFactory.getLogger(JackrabbitNodeState.class);
- private static long count = 0;
-
- private static void logNewNode(JackrabbitNodeState state) {
- count++;
- if (count % 10000 == 0) {
- log.info("Migrating node #" + count + ": " + state.getPath());
- }
- }
-
private JackrabbitNodeState parent;
private final String name;
@@ -210,7 +201,6 @@ class JackrabbitNodeState extends Abstra
this.nodeStateCache = parent.nodeStateCache;
setChildOrder();
fixFrozenUuid();
- logNewNode(this);
}
JackrabbitNodeState(
@@ -248,7 +238,6 @@ class JackrabbitNodeState extends Abstra
} catch (ItemStateException e) {
throw new IllegalStateException("Unable to access node " + id, e);
}
- logNewNode(this);
}
@Override
Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java?rev=1706674&r1=1706673&r2=1706674&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java Sun Oct 4 13:18:29 2015
@@ -36,9 +36,13 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.upgrade.RepositoryUpgrade.LoggingCompositeHook;
+import org.apache.jackrabbit.oak.upgrade.nodestate.report.LoggingReporter;
+import org.apache.jackrabbit.oak.upgrade.nodestate.report.ReportingNodeState;
import org.apache.jackrabbit.oak.upgrade.nodestate.NodeStateCopier;
import org.apache.jackrabbit.oak.upgrade.version.VersionCopyConfiguration;
import org.apache.jackrabbit.oak.upgrade.version.VersionableEditor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.ImmutableSet.copyOf;
@@ -52,6 +56,8 @@ import static org.apache.jackrabbit.oak.
public class RepositorySidegrade {
+ private static final Logger LOG = LoggerFactory.getLogger(RepositorySidegrade.class);
+
/**
* Target node store.
*/
@@ -207,7 +213,8 @@ public class RepositorySidegrade {
if (initializer != null) {
initializer.initialize(builder);
}
- copyState(builder, root);
+
+ copyState(builder, ReportingNodeState.wrap(root, new LoggingReporter(LOG, "Copying", 10000, -1)));
cleanCheckpoints(builder);
} catch (Exception e) {
Modified: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java?rev=1706674&r1=1706673&r2=1706674&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java (original)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java Sun Oct 4 13:18:29 2015
@@ -108,6 +108,8 @@ import org.apache.jackrabbit.oak.spi.sec
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.upgrade.nodestate.report.LoggingReporter;
+import org.apache.jackrabbit.oak.upgrade.nodestate.report.ReportingNodeState;
import org.apache.jackrabbit.oak.upgrade.nodestate.NodeStateCopier;
import org.apache.jackrabbit.oak.upgrade.security.GroupEditorProvider;
import org.apache.jackrabbit.oak.upgrade.security.RestrictionEditorProvider;
@@ -408,8 +410,11 @@ public class RepositoryUpgrade {
NodeState root = builder.getNodeState();
- final NodeState sourceState = JackrabbitNodeState.createRootNodeState(
- source, workspaceName, root, uriToPrefix, copyBinariesByReference, skipOnError);
+ final NodeState sourceState = ReportingNodeState.wrap(
+ JackrabbitNodeState.createRootNodeState(
+ source, workspaceName, root, uriToPrefix, copyBinariesByReference, skipOnError),
+ new LoggingReporter(logger, "Migrating", 10000, -1)
+ );
final Stopwatch watch = Stopwatch.createStarted();
Added: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/LoggingReporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/LoggingReporter.java?rev=1706674&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/LoggingReporter.java (added)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/LoggingReporter.java Sun Oct 4 13:18:29 2015
@@ -0,0 +1,75 @@
+/*
+ * 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.upgrade.nodestate.report;
+
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.slf4j.Logger;
+
+import javax.annotation.Nonnull;
+
+/**
+ * A Reporter implementation that logs every nth node
+ * and/or any nth property to the given logger on {@code info}
+ * level.
+ */
+public class LoggingReporter extends PeriodicReporter {
+
+ private final Logger logger;
+
+ private final String verb;
+
+ /**
+ * Constructor that allows setting the intervals to log node and property
+ * accesses to a given logger.
+ *
+ * @param logger The logger to log the progress to.
+ * @param nodeLogInterval Every how many nodes a log message should be written.
+ * @param propertyLogInterval Every how many properties a log message should be written.
+ */
+ public LoggingReporter(final Logger logger, final int nodeLogInterval, final int propertyLogInterval) {
+ this(logger, "Loading", nodeLogInterval, propertyLogInterval);
+ }
+
+ /**
+ * Like {@link #LoggingReporter(Logger, int, int)}, however this constructor allow
+ * to customize the verb of the log message.
+ * <br>
+ * The messages are of the format: "{verb} node #100: /path/to/the/node
+ *
+ * @param logger The logger to log the progress to.
+ * @param verb The verb to use for logging.
+ * @param nodeLogInterval Every how many nodes a log message should be written.
+ * @param propertyLogInterval Every how many properties a log message should be written.
+ */
+ public LoggingReporter(final Logger logger, final String verb, final int nodeLogInterval, final int propertyLogInterval) {
+ super(nodeLogInterval, propertyLogInterval);
+ this.logger = logger;
+ this.verb = verb;
+ }
+
+ @Override
+ protected void reportPeriodicNode(final long count, @Nonnull final ReportingNodeState nodeState) {
+ logger.info("{} node #{}: {}", verb, count, nodeState.getPath());
+ }
+
+ @Override
+ protected void reportPeriodicProperty(final long count, @Nonnull final ReportingNodeState parent, @Nonnull final String propertyName) {
+ logger.info("{} properties #{}: {}", verb, count, PathUtils.concat(parent.getPath(), propertyName));
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/LoggingReporter.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporter.java?rev=1706674&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporter.java (added)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporter.java Sun Oct 4 13:18:29 2015
@@ -0,0 +1,94 @@
+/*
+ * 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.upgrade.nodestate.report;
+
+import javax.annotation.Nonnull;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * Abstract class that simplifies development of a Reporter
+ * that should only report every nth event (node or property seen).
+ */
+public abstract class PeriodicReporter implements Reporter {
+
+ private final int nodeLogInterval;
+
+ private final int propertyLogInterval;
+
+ private AtomicLong nodes = new AtomicLong(0);
+
+ private AtomicLong properties = new AtomicLong(0);
+
+ protected PeriodicReporter(final int nodeLogInterval, final int propertyLogInterval) {
+ this.nodeLogInterval = nodeLogInterval;
+ this.propertyLogInterval = propertyLogInterval;
+ }
+
+ /**
+ * Reset the node and property counts to 0. Inheriting implementations
+ * may reset their own internal state.
+ */
+ protected void reset() {
+ nodes.set(0);
+ properties.set(0);
+ }
+
+ /**
+ * Callback called every nth time a node is accessed.
+ *
+ * @param count The count of reported nodes.
+ * @param nodeState The node that was reported.
+ */
+ protected abstract void reportPeriodicNode(
+ final long count, @Nonnull final ReportingNodeState nodeState);
+
+ /**
+ * Callback called every nth time a property is accessed.
+ *
+ * @param count The count of reported properties.
+ * @param parent The parent node of the reported property.
+ * @param propertyName The name of the reported property.
+ */
+ protected abstract void reportPeriodicProperty(
+ final long count, @Nonnull final ReportingNodeState parent, @Nonnull final String propertyName);
+
+ @Override
+ public final void reportNode(@Nonnull final ReportingNodeState nodeState) {
+ if (nodeLogInterval == -1) {
+ return;
+ }
+
+ final long count = nodes.incrementAndGet();
+ if (count % nodeLogInterval == 0) {
+ reportPeriodicNode(count, nodeState);
+ }
+ }
+
+ @Override
+ public final void reportProperty(@Nonnull final ReportingNodeState parent, @Nonnull final String propertyName) {
+ if (propertyLogInterval == -1) {
+ return;
+ }
+
+ final long count = properties.incrementAndGet();
+ if (count % propertyLogInterval == 0) {
+ reportPeriodicProperty(count, parent, propertyName);
+ }
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporter.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/Reporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/Reporter.java?rev=1706674&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/Reporter.java (added)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/Reporter.java Sun Oct 4 13:18:29 2015
@@ -0,0 +1,45 @@
+/*
+ * 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.upgrade.nodestate.report;
+
+import javax.annotation.Nonnull;
+
+/**
+ * A {@code Reporter} receives callbacks for every NodeState
+ * and PropertyState that was accessed via a {ReportingNodeState}
+ * instance.
+ */
+public interface Reporter {
+
+ /**
+ * Callback reporting that the given {@code nodeState} was accessed.
+ *
+ * @param nodeState The accessed {@code ReportingNodeState} instance.
+ */
+ void reportNode(@Nonnull final ReportingNodeState nodeState);
+
+ /**
+ * Callback reporting that the property named {@code propertyName}
+ * was accessed on the {@code parent} node.
+ *
+ * @param parent The parent node state of the reported property.
+ * @param propertyName The name of the reported property.
+ */
+ void reportProperty(@Nonnull final ReportingNodeState parent, @Nonnull final String propertyName);
+}
Propchange: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/Reporter.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeState.java?rev=1706674&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeState.java (added)
+++ jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeState.java Sun Oct 4 13:18:29 2015
@@ -0,0 +1,306 @@
+/*
+ * 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.upgrade.nodestate.report;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryChildNodeEntry;
+import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateDiff;
+import org.apache.jackrabbit.oak.spi.state.ReadOnlyBuilder;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+/**
+ * A decoration layer for NodeState instances that intercepts
+ * all accesses to NodeStates and PropertyStates (getters) and
+ * informs a {@link Reporter} via its callbacks that the respective
+ * NodeStates or PropertyStates have been accessed.
+ * <br>
+ * The decoration is deep, i.e. any child NodeStates will be
+ * decorated as well and will report to the same {@code Reporter}
+ * instance.
+ * <br>
+ * For convenience, a {@link PeriodicReporter} abstract class exists.
+ * This simplifies reporting every nth node/property only.
+ * <br>
+ * Note: Multiple accesses to the same node or property are each
+ * reported. Therefore if exactly counting unique accesses is a
+ * requirement, the reporter needs to take care of de-duplication.
+ *
+ * @see Reporter, PeriodicReporter, LoggingReporter
+ */
+public class ReportingNodeState implements NodeState {
+
+ private final ReportingNodeState parent;
+ private final NodeState delegate;
+ private final String name;
+ private final Reporter reporter;
+
+ /**
+ * Allows wrapping a NodeState as a ReportingNodeState. The wrapped
+ * NodeState is treated as the root of a tree (i.e. path is "/").
+ * <br>
+ * Any children accessed via this NodeState are also wrapped. Each
+ * wrapped NodeState is also reported to the provided Reporter.
+ *
+ * @param nodeState The NodeState to be wrapped.
+ * @param reporter The reporter to report to.
+ * @return the wrapped NodeState.
+ */
+ public static NodeState wrap(NodeState nodeState, Reporter reporter) {
+ return wrapAndReport(null, "/", nodeState, reporter);
+ }
+
+ private static NodeState wrapAndReport(@Nullable ReportingNodeState parent, @Nonnull String name,
+ @Nonnull NodeState delegate, @Nonnull Reporter reporter) {
+ final ReportingNodeState nodeState = new ReportingNodeState(parent, name, delegate, reporter);
+ reporter.reportNode(nodeState);
+ return nodeState;
+ }
+
+ protected NodeState wrapChild(String name, NodeState delegate) {
+ return wrapAndReport(this, name, delegate, this.reporter);
+ }
+
+ private ReportingNodeState(ReportingNodeState parent, String name, NodeState delegate, Reporter reporter) {
+ this.parent = parent;
+ this.delegate = delegate;
+ this.name = name;
+ this.reporter = reporter;
+ }
+
+ /**
+ * ReportingNodeState instances provide access to their path via their
+ * parent hierarchy. Note that calculating the path on every access may
+ * incur a significant performance penalty.
+ *
+ * @return The path of the ReportingNodeState instance, assuming that
+ * the first wrapped instance is the root node.
+ */
+ public String getPath() {
+ if (parent == null) {
+ return name;
+ }
+ return PathUtils.concat(parent.getPath(), name);
+ }
+
+ /**
+ * The ReportingNodeState implementation returns a ReadOnlyBuilder, which
+ * will fail for any mutable operation.
+ *
+ * @return a NodeBuilder instance corresponding to this NodeState.
+ */
+ @Override
+ @Nonnull
+ public NodeBuilder builder() {
+ return new ReadOnlyBuilder(this);
+ }
+
+ @Override
+ public boolean compareAgainstBaseState(final NodeState base, final NodeStateDiff diff) {
+ return delegate.compareAgainstBaseState(base, new ReportingDiff(diff, this));
+ }
+
+ /**
+ * Note that any implementation-specific optimizations of wrapped NodeStates
+ * will not work if a ReportingNodeState is passed into their {@code #equals()}
+ * method. This implementation will compare the wrapped NodeState, however. So
+ * optimizations work when calling {@code #equals()} on a ReportingNodeState.
+ *
+ * @param other Object to compare with this NodeState.
+ * @return true if the given object is equal to this NodeState, false otherwise.
+ */
+ @Override
+ public boolean equals(final Object other) {
+ if (other instanceof ReportingNodeState) {
+ return delegate.equals(((ReportingNodeState) other).delegate);
+ } else {
+ return delegate.equals(other);
+ }
+ }
+
+ @Override
+ public boolean exists() {
+ return delegate.exists();
+ }
+
+ @Override
+ public boolean hasChildNode(@Nonnull final String name) {
+ return delegate.hasChildNode(name);
+ }
+
+ @Override
+ @Nonnull
+ public NodeState getChildNode(@Nonnull final String name) throws IllegalArgumentException {
+ return wrapChild(name, delegate.getChildNode(name));
+ }
+
+ @Override
+ public long getChildNodeCount(final long max) {
+ return delegate.getChildNodeCount(max);
+ }
+
+ @Override
+ public Iterable<String> getChildNodeNames() {
+ return delegate.getChildNodeNames();
+ }
+
+ @Override
+ @Nonnull
+ public Iterable<? extends ChildNodeEntry> getChildNodeEntries() {
+ return Iterables.transform(
+ delegate.getChildNodeEntries(),
+ new Function<ChildNodeEntry, ChildNodeEntry>() {
+ @Override
+ @Nonnull
+ public ChildNodeEntry apply(final ChildNodeEntry childNodeEntry) {
+ final String name = childNodeEntry.getName();
+ return new MemoryChildNodeEntry(name, wrapChild(name, childNodeEntry.getNodeState()));
+ }
+ }
+ );
+ }
+
+ @Override
+ public boolean hasProperty(@Nonnull final String name) {
+ return delegate.hasProperty(name);
+ }
+
+ @Override
+ public boolean getBoolean(@Nonnull final String name) {
+ reporter.reportProperty(this, name);
+ return delegate.getBoolean(name);
+ }
+
+ @Override
+ public long getLong(final String name) {
+ reporter.reportProperty(this, name);
+ return delegate.getLong(name);
+ }
+
+ @Override
+ @CheckForNull
+ public String getName(@Nonnull final String name) {
+ reporter.reportProperty(this, name);
+ return delegate.getName(name);
+ }
+
+ @Override
+ @Nonnull
+ public Iterable<String> getNames(@Nonnull final String name) {
+ reporter.reportProperty(this, name);
+ return delegate.getNames(name);
+ }
+
+
+ @Override
+ @CheckForNull
+ public String getString(final String name) {
+ reporter.reportProperty(this, name);
+ return delegate.getString(name);
+ }
+
+ @Override
+ @Nonnull
+ public Iterable<String> getStrings(@Nonnull final String name) {
+ reporter.reportProperty(this, name);
+ return delegate.getStrings(name);
+ }
+
+ @Override
+ @CheckForNull
+ public PropertyState getProperty(@Nonnull final String name) {
+ reporter.reportProperty(this, name);
+ return delegate.getProperty(name);
+ }
+
+ @Override
+ public long getPropertyCount() {
+ return delegate.getPropertyCount();
+ }
+
+ @Override
+ @Nonnull
+ public Iterable<? extends PropertyState> getProperties() {
+ return Iterables.transform(
+ delegate.getProperties(),
+ new Function<PropertyState, PropertyState>() {
+ @Override
+ @Nonnull
+ public PropertyState apply(final PropertyState propertyState) {
+ reporter.reportProperty(ReportingNodeState.this, propertyState.getName());
+ return propertyState;
+ }
+ }
+ );
+ }
+
+ @Override
+ public String toString() {
+ return "ReportingNodeState{" + getPath() + ", " + super.toString() + "}";
+ }
+
+ private static class ReportingDiff implements NodeStateDiff {
+
+ private final NodeStateDiff diff;
+ private ReportingNodeState parent;
+
+ public ReportingDiff(NodeStateDiff diff, ReportingNodeState parent) {
+ this.diff = diff;
+ this.parent = parent;
+ }
+
+ @Override
+ public boolean childNodeAdded(final String name, final NodeState after) {
+ return diff.childNodeAdded(name, parent.wrapChild(name, after));
+ }
+
+ @Override
+ public boolean childNodeChanged(final String name, final NodeState before, final NodeState after) {
+ return diff.childNodeChanged(name, before, parent.wrapChild(name, after));
+ }
+
+ @Override
+ public boolean childNodeDeleted(final String name, final NodeState before) {
+ return diff.childNodeDeleted(name, before);
+ }
+
+ @Override
+ public boolean propertyAdded(final PropertyState after) {
+ return diff.propertyAdded(after);
+ }
+
+ @Override
+ public boolean propertyChanged(final PropertyState before, final PropertyState after) {
+ return diff.propertyChanged(before, after);
+ }
+
+ @Override
+ public boolean propertyDeleted(final PropertyState before) {
+ return diff.propertyDeleted(before);
+ }
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeState.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/AssertingPeriodicReporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/AssertingPeriodicReporter.java?rev=1706674&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/AssertingPeriodicReporter.java (added)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/AssertingPeriodicReporter.java Sun Oct 4 13:18:29 2015
@@ -0,0 +1,151 @@
+/*
+ * 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.upgrade.nodestate.report;
+
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+
+import javax.annotation.Nonnull;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.hamcrest.CoreMatchers.allOf;
+import static org.hamcrest.CoreMatchers.any;
+import static org.hamcrest.CoreMatchers.anyOf;
+import static org.hamcrest.CoreMatchers.anything;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.collection.IsMapContaining.hasEntry;
+
+class AssertingPeriodicReporter extends PeriodicReporter {
+
+ private final Map<Long, String> reportedNodes = new HashMap<Long, String>();
+
+ private final Map<Long, String> reportedProperties = new HashMap<Long, String>();
+
+ public AssertingPeriodicReporter(final int nodeLogInterval, final int propertyLogInterval) {
+ super(nodeLogInterval, propertyLogInterval);
+ }
+
+ @Override
+ public void reset() {
+ super.reset();
+ reportedNodes.clear();
+ reportedProperties.clear();
+ }
+
+ @Override
+ protected void reportPeriodicNode(final long count, @Nonnull final ReportingNodeState nodeState) {
+ reportedNodes.put(count, nodeState.getPath());
+ }
+
+ @Override
+ protected void reportPeriodicProperty(final long count, @Nonnull final ReportingNodeState parent, @Nonnull final String propertyName) {
+ reportedProperties.put(count, PathUtils.concat(parent.getPath(), propertyName));
+ }
+
+ @Override
+ public String toString() {
+ return "Reported{ nodes: " + reportedNodes + " properties: " + reportedProperties + "}";
+ }
+
+ public static Matcher<AssertingPeriodicReporter> hasReportedNode(final int count, final String path) {
+ return hasReports(hasEntry((long) count, path), whatever());
+ }
+
+ public static Matcher<AssertingPeriodicReporter> hasReportedNode(final int count, final Matcher<String> pathMatcher) {
+ return hasReports(hasEntry(equalTo((long) count), pathMatcher), whatever());
+ }
+
+ public static Matcher<AssertingPeriodicReporter> hasReportedNodes(final String... paths) {
+ final List<Matcher<? super AssertingPeriodicReporter>> matchers =
+ new ArrayList<Matcher<? super AssertingPeriodicReporter>>();
+ for (final String path : paths) {
+ matchers.add(hasReports(hasEntry(any(Long.class), equalTo(path)), whatever()));
+ }
+ return allOf(matchers);
+ }
+
+ public static Matcher<AssertingPeriodicReporter> hasReportedProperty(final int count, final String path) {
+ return hasReports(whatever(), hasEntry((long) count, path));
+ }
+
+ public static Matcher<AssertingPeriodicReporter> hasReportedProperty(final int count, final Matcher<String> pathMatcher) {
+ return hasReports(whatever(), hasEntry(equalTo((long) count), pathMatcher));
+ }
+
+ public static Matcher<AssertingPeriodicReporter> hasReportedProperty(final String... paths) {
+ final List<Matcher<? super String>> pathMatchers = new ArrayList<Matcher<? super String>>();
+ for (final String path : paths) {
+ pathMatchers.add(equalTo(path));
+ }
+ return hasReports(whatever(), hasEntry(any(Long.class), allOf(pathMatchers)));
+ }
+
+ private static Matcher<Map<? extends Long, ? extends String>> whatever() {
+ return anyOf(
+ hasEntry(any(Long.class), any(String.class)),
+ anything()
+ );
+ }
+
+ private static Matcher<AssertingPeriodicReporter> hasReports(
+ final Matcher<Map<? extends Long, ? extends String>> nodeMapMatcher,
+ final Matcher<Map<? extends Long, ? extends String>> propertyMapMatcher) {
+
+ return new org.hamcrest.TypeSafeMatcher<AssertingPeriodicReporter>() {
+ @Override
+ protected boolean matchesSafely(final AssertingPeriodicReporter reporter) {
+ final boolean nodesMatch = nodeMapMatcher.matches(reporter.reportedNodes);
+ final boolean propertiesMatch = propertyMapMatcher.matches(reporter.reportedProperties);
+ return nodesMatch && propertiesMatch;
+ }
+
+ @Override
+ public void describeTo(final Description description) {
+ description
+ .appendText("Reported{ nodes: ")
+ .appendDescriptionOf(nodeMapMatcher)
+ .appendText(", properties: ")
+ .appendDescriptionOf(propertyMapMatcher);
+
+ }
+ };
+ }
+
+ private static Matcher<AssertingPeriodicReporter> hasPropertyMapContaining(
+ final Matcher<Map<? extends Long, ? extends String>> mapMatcher) {
+
+ return new org.hamcrest.TypeSafeMatcher<AssertingPeriodicReporter>() {
+ @Override
+ protected boolean matchesSafely(final AssertingPeriodicReporter reporter) {
+ return mapMatcher.matches(reporter.reportedProperties);
+ }
+
+ @Override
+ public void describeTo(final Description description) {
+ description
+ .appendText("Has reported properties ")
+ .appendDescriptionOf(mapMatcher);
+ }
+ };
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/AssertingPeriodicReporter.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporterTest.java?rev=1706674&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporterTest.java (added)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporterTest.java Sun Oct 4 13:18:29 2015
@@ -0,0 +1,63 @@
+/*
+ * 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.upgrade.nodestate.report;
+
+import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.junit.Test;
+
+import static org.apache.jackrabbit.oak.upgrade.nodestate.report.AssertingPeriodicReporter.hasReportedNode;
+import static org.apache.jackrabbit.oak.upgrade.nodestate.report.AssertingPeriodicReporter.hasReportedProperty;
+import static org.junit.Assert.assertThat;
+
+public class PeriodicReporterTest {
+
+ @Test
+ public void callbackEveryTenNodes() {
+ final AssertingPeriodicReporter reporter = new AssertingPeriodicReporter(10, -1);
+ final NodeState counter = ReportingNodeState.wrap(EmptyNodeState.EMPTY_NODE, reporter)
+ .getChildNode("counter");
+
+ reporter.reset();
+ for (int i = 1; i < 40; i++) {
+ counter.getChildNode(Integer.toString(i));
+ }
+
+ assertThat(reporter, hasReportedNode(10, "/counter/10"));
+ assertThat(reporter, hasReportedNode(20, "/counter/20"));
+ assertThat(reporter, hasReportedNode(30, "/counter/30"));
+ }
+
+ @Test
+ public void callbackEveryTenProperties() {
+ final AssertingPeriodicReporter reporter = new AssertingPeriodicReporter(-1, 10);
+ final NodeState counter = ReportingNodeState.wrap(EmptyNodeState.EMPTY_NODE, reporter)
+ .getChildNode("counter");
+
+ reporter.reset();
+ for (int i = 1; i < 40; i++) {
+ counter.getProperty(Integer.toString(i));
+ }
+
+ assertThat(reporter, hasReportedProperty(10, "/counter/10"));
+ assertThat(reporter, hasReportedProperty(20, "/counter/20"));
+ assertThat(reporter, hasReportedProperty(30, "/counter/30"));
+ }
+
+}
Propchange: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporterTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeStateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeStateTest.java?rev=1706674&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeStateTest.java (added)
+++ jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeStateTest.java Sun Oct 4 13:18:29 2015
@@ -0,0 +1,144 @@
+/*
+ * 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.upgrade.nodestate.report;
+
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
+import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
+import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.upgrade.util.NodeStateTestUtils;
+import org.junit.Test;
+
+import static org.apache.jackrabbit.oak.upgrade.nodestate.report.AssertingPeriodicReporter.hasReportedNode;
+import static org.apache.jackrabbit.oak.upgrade.nodestate.report.AssertingPeriodicReporter.hasReportedNodes;
+import static org.apache.jackrabbit.oak.upgrade.nodestate.report.AssertingPeriodicReporter.hasReportedProperty;
+import static org.hamcrest.CoreMatchers.any;
+import static org.junit.Assert.assertThat;
+
+public class ReportingNodeStateTest {
+
+ @Test
+ public void getChildNodeReportsNode() {
+ final AssertingPeriodicReporter reporter = new AssertingPeriodicReporter(10, 10);
+ final NodeState nodeState = ReportingNodeState.wrap(EmptyNodeState.EMPTY_NODE, reporter);
+
+ reporter.reset();
+ for (int i = 1; i <= 20; i++) {
+ nodeState.getChildNode("a" + i);
+ }
+
+ assertThat(reporter, hasReportedNode(10, "/a10"));
+ assertThat(reporter, hasReportedNode(20, "/a20"));
+ }
+
+ @Test
+ public void getChildNodeEntriesReportsNode() {
+ final NodeBuilder builder = EmptyNodeState.EMPTY_NODE.builder();
+ for (int i = 1; i < 20; i++) {
+ builder.child("a" + i);
+ }
+
+ final AssertingPeriodicReporter reporter = new AssertingPeriodicReporter(10, 10);
+ final NodeState nodeState = ReportingNodeState.wrap(builder.getNodeState(), reporter);
+
+ reporter.reset();
+ int counter = 0;
+ String name = "<none>";
+ for (final ChildNodeEntry child : nodeState.getChildNodeEntries()) {
+ if (++counter == 10) {
+ name = child.getName();
+ break;
+ }
+ }
+
+ assertThat(reporter, hasReportedNode(10, "/" + name));
+ }
+
+ @Test
+ public void getPropertyReportsProperty() {
+ final AssertingPeriodicReporter reporter = new AssertingPeriodicReporter(10, 10);
+ final NodeState nodeState = ReportingNodeState.wrap(EmptyNodeState.EMPTY_NODE, reporter);
+
+ reporter.reset();
+ final String name = "a";
+ for (int i = 0; i < 3; i++) {
+ // 3 * 7 property requests = 21
+ nodeState.getProperty(name);
+ nodeState.getBoolean(name);
+ nodeState.getLong(name);
+ nodeState.getString(name);
+ nodeState.getStrings(name);
+ nodeState.getName(name);
+ nodeState.getNames(name);
+ }
+
+ assertThat(reporter, hasReportedProperty(10, "/a"));
+ assertThat(reporter, hasReportedProperty(20, "/a"));
+ }
+
+ @Test
+ public void getPropertiesReportsProperty() {
+ final NodeBuilder builder = EmptyNodeState.EMPTY_NODE.builder();
+ for (int i = 0; i < 20; i++) {
+ builder.setProperty("a" + i, "foo");
+ }
+
+ final AssertingPeriodicReporter reporter = new AssertingPeriodicReporter(10, 10);
+ final NodeState nodeState = ReportingNodeState.wrap(builder.getNodeState(), reporter);
+
+ reporter.reset();
+ int counter = 0;
+ for (final PropertyState property : nodeState.getProperties()) {
+ if (++counter == 10) {
+ break;
+ }
+ }
+
+ assertThat(reporter, hasReportedProperty(10, any(String.class)));
+ }
+
+ @Test
+ public void compareAgainstBaseState() {
+ final NodeBuilder root = EmptyNodeState.EMPTY_NODE.builder();
+ root.child("a").child("aa");
+
+ final NodeState before = root.getNodeState();
+
+ root.child("a").child("ab");
+ root.child("b");
+
+ final AssertingPeriodicReporter reporter = new AssertingPeriodicReporter(1, -1);
+ final NodeState after = ReportingNodeState.wrap(root.getNodeState(), reporter);
+
+ reporter.reset();
+ NodeStateTestUtils.expectDifference()
+ .childNodeAdded(
+ "/a/ab",
+ "/b"
+ )
+ .childNodeChanged(
+ "/a"
+ )
+ .strict()
+ .verify(before, after);
+
+ assertThat(reporter, hasReportedNodes("/a", "/a/ab", "/b"));
+ }
+}
Propchange: jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeStateTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Re: svn commit: r1706674 - in /jackrabbit/oak/trunk/oak-upgrade: ./
src/main/java/org/apache/jackrabbit/oak/upgrade/ src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
Posted by Julian Sedding <js...@gmail.com>.
Java 6 failed to infer some generic argument types. Fixed in
https://svn.apache.org/r1706797
Regards
Julian
On Mon, Oct 5, 2015 at 12:09 PM, Julian Sedding <js...@gmail.com> wrote:
> Thanks for alerting me. I'll take a look.
>
> Regards
> Julian
>
> On Mon, Oct 5, 2015 at 12:06 PM, Michael Dürig <md...@apache.org> wrote:
>>
>> Hi,
>>
>> I just noted that this won't compile on Java 1.6 [1]. Julian, could you have
>> a look?
>>
>> OTOH, do we still need/want to support Java 1.6? Let's discuss this in
>> another thread.
>>
>> Michael
>>
>>
>> [1] [ERROR] /jenkins/workspace/Apache Jackrabbit Oak
>> matrix/jdk/jdk-1.6u45/label/Ubuntu/nsfixtures/SEGMENT_MK/profile/unittesting/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/AssertingPeriodicReporter.java:[75,15]
>> hasReports(org.hamcrest.Matcher<java.util.Map<? extends java.lang.Long,?
>> extends java.lang.String>>,org.hamcrest.Matcher<java.util.Map<? extends
>> java.lang.Long,? extends java.lang.String>>) in
>> org.apache.jackrabbit.oak.upgrade.nodestate.report.AssertingPeriodicReporter
>> cannot be applied to (org.hamcrest.Matcher<java.util.Map<? extends
>> java.lang.Object,? extends
>> java.lang.Object>>,org.hamcrest.Matcher<java.util.Map<? extends
>> java.lang.Long,? extends java.lang.String>>)
>>
>>
>>
>>
>>
>> On 4.10.15 3:18 , jsedding@apache.org wrote:
>>>
>>> Author: jsedding
>>> Date: Sun Oct 4 13:18:29 2015
>>> New Revision: 1706674
>>>
>>> URL:http://svn.apache.org/viewvc?rev=1706674&view=rev
>>> Log:
>>> OAK-3460 - Progress logging for RepositorySidegrade
>>>
>>> - implemented ReportingNodeState wrapper in order to be able to log each
>>> NodeState access
>>>
>>> Added:
>>>
>>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
>>>
>>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/LoggingReporter.java
>>> (with props)
>>>
>>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporter.java
>>> (with props)
>>>
>>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/Reporter.java
>>> (with props)
>>>
>>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeState.java
>>> (with props)
>>>
>>> jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
>>>
>>> jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/AssertingPeriodicReporter.java
>>> (with props)
>>>
>>> jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporterTest.java
>>> (with props)
>>>
>>> jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeStateTest.java
>>> (with props)
>>> Modified:
>>> jackrabbit/oak/trunk/oak-upgrade/pom.xml
>>>
>>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
>>>
>>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
>>>
>>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
>>
>>
Re: svn commit: r1706674 - in /jackrabbit/oak/trunk/oak-upgrade: ./
src/main/java/org/apache/jackrabbit/oak/upgrade/ src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
Posted by Julian Sedding <js...@gmail.com>.
Thanks for alerting me. I'll take a look.
Regards
Julian
On Mon, Oct 5, 2015 at 12:06 PM, Michael Dürig <md...@apache.org> wrote:
>
> Hi,
>
> I just noted that this won't compile on Java 1.6 [1]. Julian, could you have
> a look?
>
> OTOH, do we still need/want to support Java 1.6? Let's discuss this in
> another thread.
>
> Michael
>
>
> [1] [ERROR] /jenkins/workspace/Apache Jackrabbit Oak
> matrix/jdk/jdk-1.6u45/label/Ubuntu/nsfixtures/SEGMENT_MK/profile/unittesting/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/AssertingPeriodicReporter.java:[75,15]
> hasReports(org.hamcrest.Matcher<java.util.Map<? extends java.lang.Long,?
> extends java.lang.String>>,org.hamcrest.Matcher<java.util.Map<? extends
> java.lang.Long,? extends java.lang.String>>) in
> org.apache.jackrabbit.oak.upgrade.nodestate.report.AssertingPeriodicReporter
> cannot be applied to (org.hamcrest.Matcher<java.util.Map<? extends
> java.lang.Object,? extends
> java.lang.Object>>,org.hamcrest.Matcher<java.util.Map<? extends
> java.lang.Long,? extends java.lang.String>>)
>
>
>
>
>
> On 4.10.15 3:18 , jsedding@apache.org wrote:
>>
>> Author: jsedding
>> Date: Sun Oct 4 13:18:29 2015
>> New Revision: 1706674
>>
>> URL:http://svn.apache.org/viewvc?rev=1706674&view=rev
>> Log:
>> OAK-3460 - Progress logging for RepositorySidegrade
>>
>> - implemented ReportingNodeState wrapper in order to be able to log each
>> NodeState access
>>
>> Added:
>>
>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
>>
>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/LoggingReporter.java
>> (with props)
>>
>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporter.java
>> (with props)
>>
>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/Reporter.java
>> (with props)
>>
>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeState.java
>> (with props)
>>
>> jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
>>
>> jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/AssertingPeriodicReporter.java
>> (with props)
>>
>> jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporterTest.java
>> (with props)
>>
>> jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeStateTest.java
>> (with props)
>> Modified:
>> jackrabbit/oak/trunk/oak-upgrade/pom.xml
>>
>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
>>
>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
>>
>> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
>
>
Re: svn commit: r1706674 - in /jackrabbit/oak/trunk/oak-upgrade: ./
src/main/java/org/apache/jackrabbit/oak/upgrade/
src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
Posted by Michael Dürig <md...@apache.org>.
Hi,
I just noted that this won't compile on Java 1.6 [1]. Julian, could you
have a look?
OTOH, do we still need/want to support Java 1.6? Let's discuss this in
another thread.
Michael
[1] [ERROR] /jenkins/workspace/Apache Jackrabbit Oak
matrix/jdk/jdk-1.6u45/label/Ubuntu/nsfixtures/SEGMENT_MK/profile/unittesting/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/AssertingPeriodicReporter.java:[75,15]
hasReports(org.hamcrest.Matcher<java.util.Map<? extends java.lang.Long,?
extends java.lang.String>>,org.hamcrest.Matcher<java.util.Map<? extends
java.lang.Long,? extends java.lang.String>>) in
org.apache.jackrabbit.oak.upgrade.nodestate.report.AssertingPeriodicReporter
cannot be applied to (org.hamcrest.Matcher<java.util.Map<? extends
java.lang.Object,? extends
java.lang.Object>>,org.hamcrest.Matcher<java.util.Map<? extends
java.lang.Long,? extends java.lang.String>>)
On 4.10.15 3:18 , jsedding@apache.org wrote:
> Author: jsedding
> Date: Sun Oct 4 13:18:29 2015
> New Revision: 1706674
>
> URL:http://svn.apache.org/viewvc?rev=1706674&view=rev
> Log:
> OAK-3460 - Progress logging for RepositorySidegrade
>
> - implemented ReportingNodeState wrapper in order to be able to log each NodeState access
>
> Added:
> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/LoggingReporter.java (with props)
> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporter.java (with props)
> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/Reporter.java (with props)
> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeState.java (with props)
> jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/
> jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/AssertingPeriodicReporter.java (with props)
> jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/PeriodicReporterTest.java (with props)
> jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/nodestate/report/ReportingNodeStateTest.java (with props)
> Modified:
> jackrabbit/oak/trunk/oak-upgrade/pom.xml
> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/JackrabbitNodeState.java
> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
> jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java