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 ju...@apache.org on 2013/12/02 23:51:15 UTC
svn commit: r1547233 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
plugins/memory/ plugins/name/ plugins/segment/ spi/state/
Author: jukka
Date: Mon Dec 2 22:51:14 2013
New Revision: 1547233
URL: http://svn.apache.org/r1547233
Log:
OAK-924: Optimize namespace lookups
Optimize the access of prefix information in the name validator
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidatorProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyNodeState.java?rev=1547233&r1=1547232&r2=1547233&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/EmptyNodeState.java Mon Dec 2 22:51:14 2013
@@ -80,6 +80,11 @@ public final class EmptyNodeState implem
return null;
}
+ @Override
+ public Iterable<String> getStrings(String name) {
+ return emptyList();
+ }
+
@Override @CheckForNull
public String getName(@Nonnull String name) {
return null;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java?rev=1547233&r1=1547232&r2=1547233&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidator.java Mon Dec 2 22:51:14 2013
@@ -20,7 +20,6 @@ import java.util.Set;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.core.ImmutableTree;
import org.apache.jackrabbit.oak.spi.commit.DefaultValidator;
import org.apache.jackrabbit.oak.spi.commit.Validator;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -35,10 +34,6 @@ class NameValidator extends DefaultValid
private final Set<String> prefixes;
- public NameValidator(NodeState root) {
- this.prefixes = Namespaces.getNamespacePrefixesAsSet(new ImmutableTree(root));
- }
-
NameValidator(Set<String> prefixes) {
this.prefixes = prefixes;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidatorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidatorProvider.java?rev=1547233&r1=1547232&r2=1547233&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidatorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NameValidatorProvider.java Mon Dec 2 22:51:14 2013
@@ -16,6 +16,12 @@
*/
package org.apache.jackrabbit.oak.plugins.name;
+import static com.google.common.collect.Sets.newHashSet;
+import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
+import static org.apache.jackrabbit.oak.plugins.name.NamespaceConstants.NSDATA;
+import static org.apache.jackrabbit.oak.plugins.name.NamespaceConstants.NSDATA_PREFIXES;
+import static org.apache.jackrabbit.oak.plugins.name.NamespaceConstants.REP_NAMESPACES;
+
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.apache.jackrabbit.oak.spi.commit.EditorProvider;
@@ -34,7 +40,11 @@ public class NameValidatorProvider exten
@Override
public Validator getRootValidator(NodeState before, NodeState after) {
- return new NameValidator(after);
+ return new NameValidator(newHashSet(after
+ .getChildNode(JCR_SYSTEM)
+ .getChildNode(REP_NAMESPACES)
+ .getChildNode(NSDATA)
+ .getString(NSDATA_PREFIXES)));
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java?rev=1547233&r1=1547232&r2=1547233&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java Mon Dec 2 22:51:14 2013
@@ -173,6 +173,11 @@ public class SegmentNodeState extends Re
}
@Override
+ public Iterable<String> getStrings(String name) {
+ return AbstractNodeState.getStrings(this, name);
+ }
+
+ @Override
public String getName(String name) {
return AbstractNodeState.getName(this, name);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java?rev=1547233&r1=1547232&r2=1547233&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/AbstractNodeState.java Mon Dec 2 22:51:14 2013
@@ -22,6 +22,7 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.api.Type.NAME;
import static org.apache.jackrabbit.oak.api.Type.NAMES;
import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static org.apache.jackrabbit.oak.api.Type.STRINGS;
import java.util.HashSet;
import java.util.Iterator;
@@ -75,6 +76,15 @@ public abstract class AbstractNodeState
}
}
+ public static Iterable<String> getStrings(NodeState state, String name) {
+ PropertyState property = state.getProperty(name);
+ if (property != null && property.getType() == STRINGS) {
+ return property.getValue(STRINGS);
+ } else {
+ return emptyList();
+ }
+ }
+
public static String getName(NodeState state, String name) {
PropertyState property = state.getProperty(name);
if (property != null && property.getType() == NAME) {
@@ -215,6 +225,11 @@ public abstract class AbstractNodeState
return getString(this, name);
}
+ @Override
+ public Iterable<String> getStrings(String name) {
+ return getStrings(this, name);
+ }
+
@Override @CheckForNull
public String getName(@Nonnull String name) {
return getName(this, name);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java?rev=1547233&r1=1547232&r2=1547233&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/state/NodeState.java Mon Dec 2 22:51:14 2013
@@ -207,6 +207,24 @@ public interface NodeState {
String getString(String name);
/**
+ * Returns the string values of the named property. The implementation
+ * is equivalent to the following code, but may be optimized.
+ * <pre>
+ * PropertyState property = state.getProperty(name);
+ * if (property != null && property.getType() == Type.STRINGS) {
+ * return property.getValue(Type.STRINGS);
+ * } else {
+ * return Collections.emptyList();
+ * }
+ * </pre>
+ *
+ * @param name property name
+ * @return string values of the named property, or an empty collection
+ */
+ @Nonnull
+ Iterable<String> getStrings(@Nonnull String name);
+
+ /**
* Returns the name value of the named property. The implementation
* is equivalent to the following code, but may be optimized.
* <pre>