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 al...@apache.org on 2014/04/10 14:48:15 UTC
svn commit: r1586284 - in /jackrabbit/oak/branches/1.0: ./ oak-core/
oak-core/src/main/java/org/apache/jackrabbit/oak/
oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/
oak-core/src/main/java/org/apache/jackrabbit/oak/management/
oak-core/src/m...
Author: alexparvulescu
Date: Thu Apr 10 12:48:15 2014
New Revision: 1586284
URL: http://svn.apache.org/r1586284
Log:
OAK-1684 Non-blocking reindexing doesn't save the initial checkpoint
merged to 1.0 branch
Added:
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/jmx/
- copied from r1585680, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/jmx/
Modified:
jackrabbit/oak/branches/1.0/ (props changed)
jackrabbit/oak/branches/1.0/oak-core/pom.xml
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/AsyncIndexUpdate.java
Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1585680
Modified: jackrabbit/oak/branches/1.0/oak-core/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/pom.xml?rev=1586284&r1=1586283&r2=1586284&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/pom.xml (original)
+++ jackrabbit/oak/branches/1.0/oak-core/pom.xml Thu Apr 10 12:48:15 2014
@@ -58,6 +58,7 @@
org.apache.jackrabbit.oak.plugins.index.aggregate,
org.apache.jackrabbit.oak.plugins.index.nodetype,
org.apache.jackrabbit.oak.plugins.index.property,
+ org.apache.jackrabbit.oak.plugins.index.property.jmx,
org.apache.jackrabbit.oak.plugins.index.reference,
org.apache.jackrabbit.oak.plugins.itemsave,
org.apache.jackrabbit.oak.plugins.lock,
Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java?rev=1586284&r1=1586283&r2=1586284&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java Thu Apr 10 12:48:15 2014
@@ -62,6 +62,8 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
+import org.apache.jackrabbit.oak.plugins.index.property.jmx.PropertyIndexAsyncReindex;
+import org.apache.jackrabbit.oak.plugins.index.property.jmx.PropertyIndexAsyncReindexMBean;
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
import org.apache.jackrabbit.oak.query.QueryEngineSettings;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
@@ -514,6 +516,12 @@ public class Oak {
scheduleWithFixedDelay(whiteboard, task, 5, true);
registerMBean(whiteboard, IndexStatsMBean.class,
task.getIndexStats(), IndexStatsMBean.TYPE, name);
+
+ PropertyIndexAsyncReindex asyncPI = new PropertyIndexAsyncReindex(
+ new AsyncIndexUpdate("async-reindex", store, indexEditors,
+ true), executor);
+ registerMBean(whiteboard, PropertyIndexAsyncReindexMBean.class,
+ asyncPI, PropertyIndexAsyncReindexMBean.TYPE, name);
}
registerMBean(whiteboard, QueryEngineSettingsMBean.class,
Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java?rev=1586284&r1=1586283&r2=1586284&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/api/jmx/RepositoryManagementMBean.java Thu Apr 10 12:48:15 2014
@@ -175,4 +175,23 @@ public interface RepositoryManagementMBe
@CheckForNull
String checkpoint(long lifetime);
+ /**
+ * Initiate a reindex operation for the property indexes marked for
+ * reindexing
+ *
+ * @return the status of the operation right after it was initiated
+ */
+ @Nonnull
+ CompositeData startPropertyIndexAsyncReindex();
+
+ /**
+ * Asynchronous Property Index reindexing status
+ *
+ * @return the status of the ongoing operation or if none the terminal
+ * status of the last operation or <em>Status not available</em> if
+ * none.
+ */
+ @Nonnull
+ CompositeData getPropertyIndexAsyncReindexStatus();
+
}
Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java?rev=1586284&r1=1586283&r2=1586284&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/management/RepositoryManager.java Thu Apr 10 12:48:15 2014
@@ -35,6 +35,7 @@ import com.google.common.base.Function;
import org.apache.jackrabbit.oak.api.jmx.RepositoryManagementMBean;
import org.apache.jackrabbit.oak.plugins.backup.FileStoreBackupRestoreMBean;
import org.apache.jackrabbit.oak.plugins.blob.BlobGCMBean;
+import org.apache.jackrabbit.oak.plugins.index.property.jmx.PropertyIndexAsyncReindexMBean;
import org.apache.jackrabbit.oak.spi.state.RevisionGCMBean;
import org.apache.jackrabbit.oak.spi.whiteboard.Tracker;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
@@ -181,4 +182,30 @@ public class RepositoryManager implement
: null;
}
+ @Override
+ public CompositeData startPropertyIndexAsyncReindex() {
+ return execute(PropertyIndexAsyncReindexMBean.class,
+ new Function<PropertyIndexAsyncReindexMBean, Status>() {
+ @Nonnull
+ @Override
+ public Status apply(PropertyIndexAsyncReindexMBean reindexer) {
+ return fromCompositeData(reindexer
+ .startPropertyIndexAsyncReindex());
+ }
+ }).toCompositeData();
+ }
+
+ @Override
+ public CompositeData getPropertyIndexAsyncReindexStatus() {
+ return execute(PropertyIndexAsyncReindexMBean.class,
+ new Function<PropertyIndexAsyncReindexMBean, Status>() {
+ @Nonnull
+ @Override
+ public Status apply(PropertyIndexAsyncReindexMBean reindexer) {
+ return fromCompositeData(reindexer
+ .getPropertyIndexAsyncReindexStatus());
+ }
+ }).toCompositeData();
+ }
+
}
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=1586284&r1=1586283&r2=1586284&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 Thu Apr 10 12:48:15 2014
@@ -126,7 +126,7 @@ public class AsyncIndexUpdate implements
public void indexUpdate() throws CommitFailedException {
if (!dirty) {
dirty = true;
- preAsyncRun(store, name, indexStats);
+ preAsyncRun(store, name);
}
}
@@ -161,6 +161,7 @@ public class AsyncIndexUpdate implements
}
AsyncUpdateCallback callback = new AsyncUpdateCallback();
+ preAsyncRunStatsStats(indexStats);
IndexUpdate indexUpdate = new IndexUpdate(provider, name, after,
builder, callback);
@@ -170,7 +171,7 @@ public class AsyncIndexUpdate implements
if (callback.dirty) {
async.setProperty(name, checkpoint);
try {
- store.merge(builder, newCommitHook(name, state, indexStats),
+ store.merge(builder, newCommitHook(name, state),
CommitInfo.EMPTY);
} catch (CommitFailedException e) {
if (e != CONCURRENT_UPDATE) {
@@ -180,8 +181,10 @@ public class AsyncIndexUpdate implements
if (switchOnSync) {
reindexedDefinitions.addAll(indexUpdate
.getReindexedDefinitions());
+ } else {
+ postAsyncRunStatsStatus(indexStats);
}
- } else if (switchOnSync && !reindexedDefinitions.isEmpty()) {
+ } else if (switchOnSync) {
log.debug("No changes detected after diff, will try to switch to synchronous updates on "
+ reindexedDefinitions);
async.setProperty(name, checkpoint);
@@ -198,9 +201,10 @@ public class AsyncIndexUpdate implements
}
try {
- store.merge(builder, newCommitHook(name, state, indexStats),
+ store.merge(builder, newCommitHook(name, state),
CommitInfo.EMPTY);
reindexedDefinitions.clear();
+ postAsyncRunStatsStatus(indexStats);
} catch (CommitFailedException e) {
if (e != CONCURRENT_UPDATE) {
exception = e;
@@ -223,8 +227,7 @@ public class AsyncIndexUpdate implements
}
private static CommitHook newCommitHook(final String name,
- final PropertyState state, final AsyncIndexStats indexStats)
- throws CommitFailedException {
+ final PropertyState state) throws CommitFailedException {
return new CommitHook() {
@Override
@Nonnull
@@ -234,7 +237,7 @@ public class AsyncIndexUpdate implements
PropertyState stateAfterRebase = before.getChildNode(ASYNC)
.getProperty(name);
if (Objects.equal(state, stateAfterRebase)) {
- return postAsyncRunStatus(after.builder(), indexStats, name)
+ return postAsyncRunNodeStatus(after.builder(), name)
.getNodeState();
} else {
throw CONCURRENT_UPDATE;
@@ -243,10 +246,9 @@ public class AsyncIndexUpdate implements
};
}
- private static void preAsyncRun(NodeStore store, String name,
- AsyncIndexStats stats) throws CommitFailedException {
+ private static void preAsyncRun(NodeStore store, String name) throws CommitFailedException {
NodeBuilder builder = store.getRoot().builder();
- preAsyncRunStatus(builder, stats, name);
+ preAsyncRunNodeStatus(builder, name);
store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
}
@@ -278,20 +280,21 @@ public class AsyncIndexUpdate implements
return false;
}
- private static void preAsyncRunStatus(NodeBuilder builder,
- AsyncIndexStats stats, String name) {
+ private static void preAsyncRunNodeStatus(NodeBuilder builder, String name) {
String now = now();
- stats.start(now);
builder.getChildNode(INDEX_DEFINITIONS_NAME)
.setProperty(name + "-status", STATUS_RUNNING)
.setProperty(name + "-start", now, Type.DATE)
.removeProperty(name + "-done");
}
- private static NodeBuilder postAsyncRunStatus(NodeBuilder builder,
- AsyncIndexStats stats, String name) {
+ private static void preAsyncRunStatsStats(AsyncIndexStats stats) {
+ stats.start(now());
+ }
+
+ private static NodeBuilder postAsyncRunNodeStatus(NodeBuilder builder,
+ String name) {
String now = now();
- stats.done(now);
builder.getChildNode(INDEX_DEFINITIONS_NAME)
.setProperty(name + "-status", STATUS_DONE)
.setProperty(name + "-done", now, Type.DATE)
@@ -299,6 +302,10 @@ public class AsyncIndexUpdate implements
return builder;
}
+ private static void postAsyncRunStatsStatus(AsyncIndexStats stats) {
+ stats.done(now());
+ }
+
private static String now() {
return ISO8601.format(Calendar.getInstance());
}
@@ -307,6 +314,10 @@ public class AsyncIndexUpdate implements
return indexStats;
}
+ public boolean isFinished() {
+ return indexStats.getStatus() == STATUS_DONE;
+ }
+
private static final class AsyncIndexStats implements IndexStatsMBean {
private String start = "";
@@ -339,6 +350,12 @@ public class AsyncIndexUpdate implements
public String getStatus() {
return status;
}
+
+ @Override
+ public String toString() {
+ return "AsyncIndexStats [start=" + start + ", done=" + done
+ + ", status=" + status + "]";
+ }
}
}