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 th...@apache.org on 2013/02/11 10:27:20 UTC

svn commit: r1444688 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index: IndexHookManagerDiff.java p2/Property2IndexDiff.java

Author: thomasm
Date: Mon Feb 11 09:27:19 2013
New Revision: 1444688

URL: http://svn.apache.org/r1444688
Log:
OAK-590 Value type index implementation (WIP)

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManagerDiff.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexDiff.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManagerDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManagerDiff.java?rev=1444688&r1=1444687&r2=1444688&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManagerDiff.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManagerDiff.java Mon Feb 11 09:27:19 2013
@@ -69,9 +69,11 @@ class IndexHookManagerDiff implements No
     private String path;
 
     /**
-     * <type, <path, indexhook>>
+     * The map of known indexes.
+     * 
+     * Key: index type name ("p2"). Value: a map from path to index hook.
      */
-    private final Map<String, Map<String, List<IndexHook>>> updates;
+    private final Map<String, Map<String, List<IndexHook>>> indexMap;
 
     public IndexHookManagerDiff(IndexHookProvider provider, NodeBuilder root,
             Map<String, Map<String, List<IndexHook>>> updates)
@@ -83,7 +85,7 @@ class IndexHookManagerDiff implements No
             IndexHookManagerDiff parent, String name)
             throws CommitFailedException {
         this(provider, parent, getChildNode(parent.node, name), name, null,
-                parent.updates);
+                parent.indexMap);
     }
 
     private IndexHookManagerDiff(IndexHookProvider provider,
@@ -95,7 +97,7 @@ class IndexHookManagerDiff implements No
         this.node = node;
         this.name = name;
         this.path = path;
-        this.updates = updates;
+        this.indexMap = updates;
 
         if (node != null && isIndexNodeType(node.getProperty(JCR_PRIMARYTYPE))) {
             // to prevent double-reindex we only call reindex if:
@@ -153,10 +155,10 @@ class IndexHookManagerDiff implements No
             existingTypes.remove(TYPE_UNKNOWN);
             reindexTypes.remove(TYPE_UNKNOWN);
             for (String type : existingTypes) {
-                Map<String, List<IndexHook>> byType = this.updates.get(type);
+                Map<String, List<IndexHook>> byType = this.indexMap.get(type);
                 if (byType == null) {
                     byType = new TreeMap<String, List<IndexHook>>();
-                    this.updates.put(type, byType);
+                    this.indexMap.put(type, byType);
                 }
                 List<IndexHook> hooks = byType.get(getPath());
                 if (hooks == null) {
@@ -186,7 +188,8 @@ class IndexHookManagerDiff implements No
     }
 
     private String getPath() {
-        if (path == null) { // => parent != null
+        if (path == null) { 
+            // => parent != null
             path = concat(parent.getPath(), name);
         }
         return path;
@@ -198,7 +201,7 @@ class IndexHookManagerDiff implements No
      */
     private Map<String, List<IndexHook>> getIndexes() {
         Map<String, List<IndexHook>> hooks = new HashMap<String, List<IndexHook>>();
-        for (String type : this.updates.keySet()) {
+        for (String type : this.indexMap.keySet()) {
             Map<String, List<IndexHook>> newIndexes = getIndexes(type);
             for (String key : newIndexes.keySet()) {
                 if (hooks.containsKey(key)) {
@@ -217,7 +220,7 @@ class IndexHookManagerDiff implements No
      */
     private Map<String, List<IndexHook>> getIndexes(String type) {
         Map<String, List<IndexHook>> hooks = new HashMap<String, List<IndexHook>>();
-        Map<String, List<IndexHook>> indexes = this.updates.get(type);
+        Map<String, List<IndexHook>> indexes = this.indexMap.get(type);
         if (indexes != null && !indexes.isEmpty()) {
             Iterator<String> iterator = indexes.keySet().iterator();
             String bestMatch = iterator.next();
@@ -243,7 +246,7 @@ class IndexHookManagerDiff implements No
      * Fixes the relative paths on the best matching indexes so updates apply
      * properly
      */
-    private List<IndexHook> getIndexesWithRelativePaths(String path,
+    private static List<IndexHook> getIndexesWithRelativePaths(String path,
             Map<String, List<IndexHook>> bestMatches) {
         List<IndexHook> hooks = new ArrayList<IndexHook>();
         for (String relativePath : bestMatches.keySet()) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexDiff.java?rev=1444688&r1=1444687&r2=1444688&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexDiff.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexDiff.java Mon Feb 11 09:27:19 2013
@@ -82,10 +82,21 @@ class Property2IndexDiff implements Inde
     private String path;
 
     /**
+     * The map of known indexes.
      * Key: the property name. Value: the list of indexes (it is possible to
      * have multiple indexes for the same property name).
      */
-    private final Map<String, List<Property2IndexUpdate>> updates;
+    private final Map<String, List<Property2IndexUpdate>> indexMap;
+
+    public Property2IndexDiff(NodeBuilder root) {
+        this(null, root, null, "/",
+                new HashMap<String, List<Property2IndexUpdate>>());
+    }
+
+    private Property2IndexDiff(Property2IndexDiff parent, String name) {
+        this(parent, getChildNode(parent.node, name),
+                name, null, parent.indexMap);
+    }
 
     private Property2IndexDiff(
             Property2IndexDiff parent,
@@ -95,29 +106,19 @@ class Property2IndexDiff implements Inde
         this.node = node;
         this.name = name;
         this.path = path;
-        this.updates = updates;
+        this.indexMap = updates;
 
         if (node != null && node.hasChildNode(INDEX_DEFINITIONS_NAME)) {
             NodeBuilder index = node.child(INDEX_DEFINITIONS_NAME);
             for (String indexName : index.getChildNodeNames()) {
                 NodeBuilder child = index.child(indexName);
                 if (isIndexNode(child)) {
-                    update(child, indexName);
+                    addIndexes(child, indexName);
                 }
             }
         }
     }
 
-    private Property2IndexDiff(Property2IndexDiff parent, String name) {
-        this(parent, getChildNode(parent.node, name),
-                name, null, parent.updates);
-    }
-
-    public Property2IndexDiff(NodeBuilder root) {
-        this(null, root, null, "/",
-                new HashMap<String, List<Property2IndexUpdate>>());
-    }
-
     private static NodeBuilder getChildNode(NodeBuilder node, String name) {
         if (node != null && node.hasChildNode(name)) {
             return node.child(name);
@@ -142,7 +143,7 @@ class Property2IndexDiff implements Inde
      * @return the indexes
      */
     private Iterable<Property2IndexUpdate> getIndexes(String name) {
-        List<Property2IndexUpdate> indexes = updates.get(name);
+        List<Property2IndexUpdate> indexes = indexMap.get(name);
         if (indexes == null) {
             return ImmutableList.of();
         }
@@ -168,7 +169,13 @@ class Property2IndexDiff implements Inde
         return filtered;
     }
 
-    private void update(NodeBuilder builder, String indexName) {
+    /**
+     * Add the index definitions to the in-memory set of known index definitions.
+     * 
+     * @param builder the node builder that contains the index definition
+     * @param indexName the name of the index
+     */
+    private void addIndexes(NodeBuilder builder, String indexName) {
         List<String> typeNames = ImmutableList.of();
         PropertyState appliesTo = builder.getProperty(declaringNodeTypes);
         if (appliesTo != null) {
@@ -179,10 +186,10 @@ class Property2IndexDiff implements Inde
         Iterable<String> propertyNames = ps != null ? ps.getValue(Type.STRINGS)
                 : ImmutableList.of(indexName);
         for (String pname : propertyNames) {
-            List<Property2IndexUpdate> list = this.updates.get(pname);
+            List<Property2IndexUpdate> list = this.indexMap.get(pname);
             if (list == null) {
                 list = newArrayList();
-                this.updates.put(pname, list);
+                this.indexMap.put(pname, list);
             }
             boolean exists = false;
             for (Property2IndexUpdate piu : list) {
@@ -256,7 +263,7 @@ class Property2IndexDiff implements Inde
 
     @Override
     public void apply() throws CommitFailedException {
-        for (List<Property2IndexUpdate> updateList : updates.values()) {
+        for (List<Property2IndexUpdate> updateList : indexMap.values()) {
             for (Property2IndexUpdate update : updateList) {
                 update.apply();
             }
@@ -266,7 +273,7 @@ class Property2IndexDiff implements Inde
     @Override
     public void reindex(NodeBuilder state) throws CommitFailedException {
         boolean reindex = false;
-        for (List<Property2IndexUpdate> updateList : updates.values()) {
+        for (List<Property2IndexUpdate> updateList : indexMap.values()) {
             for (Property2IndexUpdate update : updateList) {
                 if (update.getAndResetReindexFlag()) {
                     reindex = true;
@@ -276,7 +283,7 @@ class Property2IndexDiff implements Inde
         if (reindex) {
             state.getNodeState().compareAgainstBaseState(
                     MemoryNodeState.EMPTY_NODE,
-                    new Property2IndexDiff(null, state, null, "/", updates));
+                    new Property2IndexDiff(null, state, null, "/", indexMap));
         }
     }
 
@@ -287,6 +294,6 @@ class Property2IndexDiff implements Inde
 
     @Override
     public void close() throws IOException {
-        updates.clear();
+        indexMap.clear();
     }
 }