You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2012/02/09 19:31:37 UTC
svn commit: r1242446 - in /jackrabbit/branches/2.2: ./
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/
Author: jukka
Date: Thu Feb 9 18:31:37 2012
New Revision: 1242446
URL: http://svn.apache.org/viewvc?rev=1242446&view=rev
Log:
2.2: Merged revision 1169801 (JCR-3066)
Added:
jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/JackrabbitThreadPool.java
- copied unchanged from r1169801, jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/JackrabbitThreadPool.java
Modified:
jackrabbit/branches/2.2/ (props changed)
jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java
jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java
jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerContext.java
jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java
Propchange: jackrabbit/branches/2.2/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Feb 9 18:31:37 2012
@@ -3,4 +3,4 @@
/jackrabbit/sandbox/JCR-1456:774917-886178
/jackrabbit/sandbox/JCR-2170:812417-816332
/jackrabbit/sandbox/tripod-JCR-2209:795441-795863
-/jackrabbit/trunk:1038201,1038203,1038205,1038657,1039064,1039347,1039408,1039422-1039423,1039888,1039946,1040033,1040090,1040459,1040601,1040606,1040661,1040958,1041379,1041439,1041761,1042643,1042647,1042978-1042982,1043084-1043086,1043088,1043343,1043357-1043358,1043430,1043554,1043616,1043618,1043637,1043656,1043893,1043897,1044239,1044312,1044451,1044613,1049473,1049491,1049514,1049518,1049520,1049859,1049870,1049874,1049878,1049880,1049883,1049889,1049891,1049894-1049895,1049899-1049901,1049909-1049911,1049915-1049916,1049919,1049923,1049925,1049931,1049936,1049939,1050212,1050298,1050346,1050551,1055068,1055070-1055071,1055116-1055117,1055127,1055134,1055164,1055498,1060431,1060434,1060753,1063756,1064213,1064670,1064760,1065599,1065622,1066059,1066071,1066794,1069831,1071562,1071573,1071680,1072087,1074140,1077927,1077970,1079314,1079317,1080186,1080540,1082599,1082611,1082620,1087304,1088991,1089032,1089053,1089436,1092106,1092117,1092683,1097363,1097513-1097514,109
8963-1098964,1099033,1099172,1100242,1100286,1101046,1102262,1102268-1102270,1102299,1102601,1104027,1126987,1128175,1129206,1130192,1130228,1132993,1136353,1136360,1138511,1141141,1141717,1143396,1143738,1144332,1144338,1144695,1152258,1155431,1157175,1165609,1173196,1174822,1174887,1175988,1176423,1176465,1176515,1176546,1177249,1177340,1178251,1178892,1179124,1179548,1180922,1181712,1182281,1182667,1182761,1182824,1182929,1183409,1185691,1186285,1186802,1187344,1188541,1188590,1198827,1202144,1209581,1213276,1213289,1232100,1236709
+/jackrabbit/trunk:1038201,1038203,1038205,1038657,1039064,1039347,1039408,1039422-1039423,1039888,1039946,1040033,1040090,1040459,1040601,1040606,1040661,1040958,1041379,1041439,1041761,1042643,1042647,1042978-1042982,1043084-1043086,1043088,1043343,1043357-1043358,1043430,1043554,1043616,1043618,1043637,1043656,1043893,1043897,1044239,1044312,1044451,1044613,1049473,1049491,1049514,1049518,1049520,1049859,1049870,1049874,1049878,1049880,1049883,1049889,1049891,1049894-1049895,1049899-1049901,1049909-1049911,1049915-1049916,1049919,1049923,1049925,1049931,1049936,1049939,1050212,1050298,1050346,1050551,1055068,1055070-1055071,1055116-1055117,1055127,1055134,1055164,1055498,1060431,1060434,1060753,1063756,1064213,1064670,1064760,1065599,1065622,1066059,1066071,1066794,1069831,1071562,1071573,1071680,1072087,1074140,1077927,1077970,1079314,1079317,1080186,1080540,1082599,1082611,1082620,1087304,1088991,1089032,1089053,1089436,1092106,1092117,1092683,1097363,1097513-1097514,109
8963-1098964,1099033,1099172,1100242,1100286,1101046,1102262,1102268-1102270,1102299,1102601,1104027,1126987,1128175,1129206,1130192,1130228,1132993,1136353,1136360,1138511,1141141,1141717,1143396,1143738,1144332,1144338,1144695,1152258,1155431,1157175,1165609,1169801,1173196,1174822,1174887,1175988,1176423,1176465,1176515,1176546,1177249,1177340,1178251,1178892,1179124,1179548,1180922,1181712,1182281,1182667,1182761,1182824,1182929,1183409,1185691,1186285,1186802,1187344,1188541,1188590,1198827,1202144,1209581,1213276,1213289,1232100,1236709
Modified: jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java?rev=1242446&r1=1242445&r2=1242446&view=diff
==============================================================================
--- jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java (original)
+++ jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryContext.java Thu Feb 9 18:31:37 2012
@@ -16,6 +16,8 @@
*/
package org.apache.jackrabbit.core;
+import java.util.concurrent.ScheduledExecutorService;
+
import org.apache.jackrabbit.core.cluster.ClusterNode;
import org.apache.jackrabbit.core.data.DataStore;
import org.apache.jackrabbit.core.fs.FileSystem;
@@ -96,6 +98,12 @@ public class RepositoryContext {
private final Timer timer = new Timer(false);
/**
+ * Thread pool of this repository.
+ */
+ private final ScheduledExecutorService executor =
+ new JackrabbitThreadPool();
+
+ /**
* Creates a component context for the given repository.
*
* @param repository repository instance
@@ -124,6 +132,15 @@ public class RepositoryContext {
}
/**
+ * Returns the thread pool of this repository.
+ *
+ * @return repository thread pool
+ */
+ public ScheduledExecutorService getExecutor() {
+ return executor;
+ }
+
+ /**
* Returns the namespace registry of this repository.
*
* @return namespace registry
Modified: jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java?rev=1242446&r1=1242445&r2=1242446&view=diff
==============================================================================
--- jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java (original)
+++ jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java Thu Feb 9 18:31:37 2012
@@ -32,11 +32,7 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
import javax.jcr.AccessDeniedException;
import javax.jcr.Credentials;
@@ -231,11 +227,6 @@ public class RepositoryImpl extends Abst
private WorkspaceEventChannel createWorkspaceEventChannel;
/**
- * Scheduled executor service.
- */
- protected final ScheduledExecutorService executor;
-
- /**
* Protected constructor.
*
* @param repConfig the repository configuration.
@@ -244,32 +235,6 @@ public class RepositoryImpl extends Abst
* or another error occurs.
*/
protected RepositoryImpl(RepositoryConfig repConfig) throws RepositoryException {
- // we should use the jackrabbit classloader for all background threads
- // from the pool
- final ClassLoader poolClassLoader = this.getClass().getClassLoader();
- ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(
- Runtime.getRuntime().availableProcessors() * 2,
- new ThreadFactory() {
-
- final AtomicInteger threadNumber = new AtomicInteger(1);
-
- /**
- * @see java.util.concurrent.ThreadFactory#newThread(java.lang.Runnable)
- */
- public Thread newThread(Runnable r) {
- final Thread t = new Thread(null, r,
- "jackrabbit-pool-" + threadNumber.getAndIncrement(),
- 0);
- t.setDaemon(true);
- if (t.getPriority() != Thread.NORM_PRIORITY)
- t.setPriority(Thread.NORM_PRIORITY);
- t.setContextClassLoader(poolClassLoader);
- return t;
- }
- },
- new ThreadPoolExecutor.CallerRunsPolicy());
- this.executor = executor;
-
// Acquire a lock on the repository home
repLock = repConfig.getRepositoryLockMechanism();
repLock.init(repConfig.getHomeDir());
@@ -632,8 +597,7 @@ public class RepositoryImpl extends Abst
repConfig,
getWorkspaceInfo(wspName).itemStateMgr,
context.getInternalVersionManager().getPersistenceManager(),
- SYSTEM_ROOT_NODE_ID,
- null, null, executor);
+ SYSTEM_ROOT_NODE_ID, null, null);
SystemSession defSysSession = getSystemSession(wspName);
ObservationManager obsMgr = defSysSession.getWorkspace().getObservationManager();
@@ -1150,6 +1114,7 @@ public class RepositoryImpl extends Abst
notifyAll();
// Shut down the executor service
+ ScheduledExecutorService executor = context.getExecutor();
executor.shutdown();
try {
// Wait for all remaining background threads to terminate
@@ -1863,7 +1828,7 @@ public class RepositoryImpl extends Abst
itemStateMgr, persistMgr,
context.getRootNodeId(),
getSystemSearchManager(getName()),
- SYSTEM_ROOT_NODE_ID, executor);
+ SYSTEM_ROOT_NODE_ID);
}
return searchMgr;
}
@@ -1903,7 +1868,8 @@ public class RepositoryImpl extends Abst
* @return the lock manager
*/
protected LockManagerImpl createLockManager() throws RepositoryException {
- return new LockManagerImpl(getSystemSession(), fs, executor);
+ return new LockManagerImpl(
+ getSystemSession(), fs, context.getExecutor());
}
/**
Modified: jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java?rev=1242446&r1=1242445&r2=1242446&view=diff
==============================================================================
--- jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java (original)
+++ jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java Thu Feb 9 18:31:37 2012
@@ -130,12 +130,11 @@ public class SearchManager implements Sy
public SearchManager(
RepositoryContext repositoryContext,
QueryHandlerFactory qhf,
- SharedItemStateManager itemMgr,
- PersistenceManager pm,
- NodeId rootNodeId,
- SearchManager parentMgr,
- NodeId excludedNodeId,
- Executor executor) throws RepositoryException {
+ SharedItemStateManager itemMgr,
+ PersistenceManager pm,
+ NodeId rootNodeId,
+ SearchManager parentMgr,
+ NodeId excludedNodeId) throws RepositoryException {
this.nsReg = repositoryContext.getNamespaceRegistry();
this.itemMgr = itemMgr;
this.parentHandler = (parentMgr != null) ? parentMgr.handler : null;
@@ -174,7 +173,7 @@ public class SearchManager implements Sy
this.handler = qhf.getQueryHandler(new QueryHandlerContext(
repositoryContext,
itemMgr, pm, rootNodeId,
- parentHandler, excludedNodeId, executor));
+ parentHandler, excludedNodeId));
}
/**
Modified: jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerContext.java?rev=1242446&r1=1242445&r2=1242446&view=diff
==============================================================================
--- jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerContext.java (original)
+++ jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/QueryHandlerContext.java Thu Feb 9 18:31:37 2012
@@ -16,7 +16,7 @@
*/
package org.apache.jackrabbit.core.query;
-import java.util.concurrent.Executor;
+import java.util.concurrent.ScheduledExecutorService;
import org.apache.jackrabbit.core.CachingHierarchyManager;
import org.apache.jackrabbit.core.HierarchyManager;
@@ -27,7 +27,6 @@ import org.apache.jackrabbit.core.nodety
import org.apache.jackrabbit.core.persistence.PersistenceManager;
import org.apache.jackrabbit.core.state.ItemStateManager;
import org.apache.jackrabbit.core.state.SharedItemStateManager;
-import org.apache.jackrabbit.util.Timer;
/**
* Acts as an argument for the {@link QueryHandler} to keep the interface
@@ -77,11 +76,6 @@ public class QueryHandlerContext {
private final NodeId excludedNodeId;
/**
- * Background task executor.
- */
- private final Executor executor;
-
- /**
* Creates a new context instance.
*
* @param stateMgr provides persistent item states.
@@ -92,7 +86,6 @@ public class QueryHandlerContext {
* @param excludedNodeId id of the node that should be excluded from
* indexing. Any descendant of that node is also
* excluded from indexing.
- * @param executor background task executor
*/
public QueryHandlerContext(
RepositoryContext repositoryContext,
@@ -100,8 +93,7 @@ public class QueryHandlerContext {
PersistenceManager pm,
NodeId rootId,
QueryHandler parentHandler,
- NodeId excludedNodeId,
- Executor executor) {
+ NodeId excludedNodeId) {
this.repositoryContext = repositoryContext;
this.stateMgr = stateMgr;
this.hmgr = new CachingHierarchyManager(rootId, stateMgr);
@@ -112,7 +104,6 @@ public class QueryHandlerContext {
propRegistry = new PropertyTypeRegistry(ntRegistry);
this.parentHandler = parentHandler;
this.excludedNodeId = excludedNodeId;
- this.executor = executor;
ntRegistry.addListener(propRegistry);
}
@@ -206,17 +197,8 @@ public class QueryHandlerContext {
*
* @return background task executor
*/
- public Executor getExecutor() {
- return executor;
- }
-
- /**
- * Returns the repository timer.
- *
- * @return repository timer
- */
- public Timer getTimer() {
- return repositoryContext.getTimer();
+ public ScheduledExecutorService getExecutor() {
+ return repositoryContext.getExecutor();
}
}
Modified: jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java?rev=1242446&r1=1242445&r2=1242446&view=diff
==============================================================================
--- jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java (original)
+++ jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java Thu Feb 9 18:31:37 2012
@@ -29,6 +29,9 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
import javax.jcr.RepositoryException;
@@ -44,7 +47,6 @@ import org.apache.jackrabbit.spi.PathFac
import org.apache.jackrabbit.spi.commons.conversion.DefaultNamePathResolver;
import org.apache.jackrabbit.spi.commons.conversion.PathResolver;
import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
-import org.apache.jackrabbit.util.Timer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
@@ -175,7 +177,7 @@ public class MultiIndex {
/**
* The time this index was last flushed or a transaction was committed.
*/
- private long lastFlushTime;
+ private long lastFlushTime = 0;
/**
* The <code>IndexMerger</code> for this <code>MultiIndex</code>.
@@ -186,7 +188,7 @@ public class MultiIndex {
* Task that is periodically called by the repository timer for checking
* if index should be flushed.
*/
- private final Timer.Task flushTask;
+ private ScheduledFuture<?> flushTask = null;
/**
* The RedoLog of this <code>MultiIndex</code>.
@@ -329,15 +331,6 @@ public class MultiIndex {
flush();
}
- flushTask = new Timer.Task() {
- public void run() {
- // check if there are any indexing jobs finished
- checkIndexingQueue(false);
- // check if volatile index should be flushed
- checkFlush();
- }
- };
-
if (indexNames.size() > 0) {
scheduleFlushTask();
}
@@ -798,7 +791,7 @@ public class MultiIndex {
synchronized (this) {
// stop timer
- flushTask.cancel();
+ unscheduleFlushTask();
// commit / close indexes
try {
@@ -1074,9 +1067,29 @@ public class MultiIndex {
indexHistory.pruneOutdated();
}
+ /**
+ * Schedules a background task for flushing the index once per second.
+ */
private void scheduleFlushTask() {
- lastFlushTime = System.currentTimeMillis();
- handler.getContext().getTimer().schedule(flushTask, 0, 1000);
+ ScheduledExecutorService executor = handler.getContext().getExecutor();
+ flushTask = executor.scheduleWithFixedDelay(new Runnable() {
+ public void run() {
+ // check if there are any indexing jobs finished
+ checkIndexingQueue(false);
+ // check if volatile index should be flushed
+ checkFlush();
+ }
+ }, 1, 1, TimeUnit.SECONDS);
+ }
+
+ /**
+ * Cancels the scheduled background index flush task.
+ */
+ private void unscheduleFlushTask() {
+ if (flushTask != null) {
+ flushTask.cancel(false);
+ flushTask = null;
+ }
}
/**