You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2014/12/08 16:31:40 UTC

svn commit: r1643841 - in /jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index: AsyncIndexUpdate.java IndexUpdate.java

Author: chetanm
Date: Mon Dec  8 15:31:40 2014
New Revision: 1643841

URL: http://svn.apache.org/r1643841
Log:
OAK-2321 - Provide details in log when reindexing is completed by AsyncIndexUpdate

Merging 1643287

Modified:
    jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
    jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java

Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java?rev=1643841&r1=1643840&r2=1643841&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java Mon Dec  8 15:31:40 2014
@@ -32,6 +32,7 @@ import java.util.concurrent.TimeUnit;
 
 import javax.annotation.Nonnull;
 
+import com.google.common.base.Stopwatch;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
@@ -253,9 +254,11 @@ public class AsyncIndexUpdate implements
 
         // check for concurrent updates
         NodeState async = root.getChildNode(ASYNC);
-        if (async.getLong(name + "-lease") > System.currentTimeMillis()) {
+        long leaseEndTime = async.getLong(name + "-lease");
+        long currentTime = System.currentTimeMillis();
+        if (leaseEndTime > currentTime) {
             log.debug("Another copy of the {} index update is already running;"
-                    + " skipping this update", name);
+                    + " skipping this update. Time left for lease to expire {}s", name, (leaseEndTime - currentTime)/1000);
             return;
         }
 
@@ -334,6 +337,7 @@ public class AsyncIndexUpdate implements
             NodeState before, String beforeCheckpoint,
             NodeState after, String afterCheckpoint, String afterTime)
             throws CommitFailedException {
+        Stopwatch watch = Stopwatch.createStarted();
         // start collecting runtime statistics
         preAsyncRunStatsStats(indexStats);
 
@@ -383,6 +387,9 @@ public class AsyncIndexUpdate implements
                 postAsyncRunStatsStatus(indexStats);
             }
             mergeWithConcurrencyCheck(builder, beforeCheckpoint, callback.lease);
+            if (indexUpdate.isReindexingPerformed()) {
+                log.info("Reindexing completed for indexes: {} in {}", indexUpdate.getAllReIndexedIndexes(), watch);
+            }
         } finally {
             callback.close();
         }

Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java?rev=1643841&r1=1643840&r2=1643841&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java Mon Dec  8 15:31:40 2014
@@ -41,6 +41,7 @@ import java.util.Set;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
+import com.google.common.collect.Sets;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
@@ -57,11 +58,7 @@ public class IndexUpdate implements Edit
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private final IndexEditorProvider provider;
-
-    private final String async;
-
-    private final NodeState root;
+    private final IndexUpdateRootState rootState;
 
     private final NodeBuilder builder;
 
@@ -84,11 +81,6 @@ public class IndexUpdate implements Edit
      */
     private final Map<String, Editor> reindex = new HashMap<String, Editor>();
 
-    /**
-     * Callback for the update events of the indexing job
-     */
-    private final IndexUpdateCallback updateCallback;
-
     private MissingIndexProviderStrategy missingProvider = new MissingIndexProviderStrategy();
 
     public IndexUpdate(
@@ -98,21 +90,15 @@ public class IndexUpdate implements Edit
         this.parent = null;
         this.name = null;
         this.path = "/";
-        this.provider = checkNotNull(provider);
-        this.async = async;
-        this.root = checkNotNull(root);
+        this.rootState = new IndexUpdateRootState(provider, async, root, updateCallback);
         this.builder = checkNotNull(builder);
-        this.updateCallback = checkNotNull(updateCallback);
     }
 
     private IndexUpdate(IndexUpdate parent, String name) {
         this.parent = checkNotNull(parent);
         this.name = name;
-        this.provider = parent.provider;
-        this.async = parent.async;
-        this.root = parent.root;
+        this.rootState = parent.rootState;
         this.builder = parent.builder.getChildNode(checkNotNull(name));
-        this.updateCallback = parent.updateCallback;
     }
 
     @Override
@@ -122,6 +108,7 @@ public class IndexUpdate implements Edit
 
         if(!reindex.isEmpty()){
             log.info("Reindexing would be performed for following indexes {}", reindex.keySet());
+            rootState.reindexedIndexes.addAll(reindex.keySet());
         }
 
         // no-op when reindex is empty
@@ -136,6 +123,14 @@ public class IndexUpdate implements Edit
         }
     }
 
+    public boolean isReindexingPerformed(){
+        return !getAllReIndexedIndexes().isEmpty();
+    }
+
+    public Set<String> getAllReIndexedIndexes(){
+        return rootState.reindexedIndexes;
+    }
+
     private boolean shouldReindex(NodeBuilder definition, NodeState before,
             String name) {
         PropertyState ps = definition.getProperty(REINDEX_PROPERTY_NAME);
@@ -155,7 +150,7 @@ public class IndexUpdate implements Edit
             NodeState before) throws CommitFailedException {
         for (String name : definitions.getChildNodeNames()) {
             NodeBuilder definition = definitions.getChildNode(name);
-            if (Objects.equal(async, definition.getString(ASYNC_PROPERTY_NAME))) {
+            if (Objects.equal(rootState.async, definition.getString(ASYNC_PROPERTY_NAME))) {
                 String type = definition.getString(TYPE_PROPERTY_NAME);
                 if (type == null) {
                     // probably not an index def
@@ -163,7 +158,7 @@ public class IndexUpdate implements Edit
                 }
                 boolean shouldReindex = shouldReindex(definition,
                         before, name);
-                Editor editor = provider.getIndexEditor(type, definition, root, updateCallback);
+                Editor editor = rootState.provider.getIndexEditor(type, definition, rootState.root, rootState.updateCallback);
                 if (editor == null) {
                     missingProvider.onMissingIndex(type, definition);
                 } else if (shouldReindex) {
@@ -301,4 +296,23 @@ public class IndexUpdate implements Edit
         return this;
     }
 
+    private static final class IndexUpdateRootState {
+        final IndexEditorProvider provider;
+        final String async;
+        final NodeState root;
+        /**
+         * Callback for the update events of the indexing job
+         */
+        final IndexUpdateCallback updateCallback;
+        final Set<String> reindexedIndexes = Sets.newHashSet();
+
+        private IndexUpdateRootState(IndexEditorProvider provider, String async, NodeState root,
+                                     IndexUpdateCallback updateCallback) {
+            this.provider = checkNotNull(provider);
+            this.async = async;
+            this.root = checkNotNull(root);
+            this.updateCallback = checkNotNull(updateCallback);
+        }
+    }
+
 }