Author: dkuleshov
Date: 2011-07-14 07:25:59 -0400 (Thu, 14 Jul 2011)
New Revision: 4632
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core/WorkspaceContainerFacade.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/ErrorLog.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/ConsistencyCheck.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/FileBasedNamespaceMappings.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/IndexingQueue.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/IndexingQueueStore.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/MultiIndex.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/PersistentIndex.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/Util.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/VolatileIndex.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/spell/LuceneSpellChecker.java
Log:
EXOJCR-1429: reverted performance regression made by r2599 commit. removed some
unnecessary privileged wrappings
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core/WorkspaceContainerFacade.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core/WorkspaceContainerFacade.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core/WorkspaceContainerFacade.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -18,6 +18,7 @@
*/
package org.exoplatform.services.jcr.core;
+import org.exoplatform.commons.utils.SecurityHelper;
import org.exoplatform.services.jcr.core.security.JCRRuntimePermissions;
import org.exoplatform.services.jcr.impl.ReadOnlySupport;
import org.exoplatform.services.jcr.impl.WorkspaceContainer;
@@ -25,6 +26,8 @@
import org.exoplatform.services.jcr.impl.backup.SuspendException;
import org.exoplatform.services.jcr.impl.backup.Suspendable;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
import java.util.Collections;
import java.util.List;
@@ -163,7 +166,7 @@
* @param state
* @throws RepositoryException
*/
- public void setState(int state) throws RepositoryException
+ public void setState(final int state) throws RepositoryException
{
// Need privileges to manage repository.
SecurityManager security = System.getSecurityManager();
@@ -172,22 +175,44 @@
security.checkPermission(JCRRuntimePermissions.MANAGE_REPOSITORY_PERMISSION);
}
- switch (state)
+ try
{
- case ManageableRepository.ONLINE :
- setOnline();
- break;
- case ManageableRepository.OFFLINE :
- break;
- case ManageableRepository.READONLY :
- setReadOnly(true);
- break;
- case ManageableRepository.SUSPENDED :
- suspend();
- break;
- default :
- return;
+ SecurityHelper.doPrivilegedExceptionAction(new
PrivilegedExceptionAction<Void>()
+ {
+ public Void run() throws RepositoryException
+ {
+ switch (state)
+ {
+ case ManageableRepository.ONLINE :
+ setOnline();
+ break;
+ case ManageableRepository.OFFLINE :
+ break;
+ case ManageableRepository.READONLY :
+ setReadOnly(true);
+ break;
+ case ManageableRepository.SUSPENDED :
+ suspend();
+ break;
+ default :
+ return null;
+ }
+ return null;
+ }
+ });
}
+ catch (PrivilegedActionException e)
+ {
+ Throwable cause = e.getCause();
+ if (cause instanceof RepositoryException)
+ {
+ throw new RepositoryException(cause);
+ }
+ else
+ {
+ throw new RuntimeException(cause);
+ }
+ }
}
/**
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/ErrorLog.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/ErrorLog.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/ErrorLog.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -18,21 +18,17 @@
package org.exoplatform.services.jcr.impl.core.query;
import org.exoplatform.commons.utils.PrivilegedFileHelper;
-import org.exoplatform.commons.utils.SecurityHelper;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import java.io.BufferedReader;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -101,29 +97,22 @@
*/
private void openFile(final File log) throws IOException
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
+ // set file size;
+ if (!PrivilegedFileHelper.exists(log))
{
- public Object run() throws Exception
- {
- // set file size;
- if (!log.exists())
- {
- log.getParentFile().mkdirs();
- log.createNewFile();
+ PrivilegedFileHelper.mkdirs(log.getParentFile());
+ PrivilegedFileHelper.createNewFile(log);
- out = PrivilegedFileHelper.fileOutputStream(log).getChannel();
- out.position(1024 * fileSize - 1);
- out.write(ByteBuffer.wrap(new byte[]{0}));
- out.position(0);
- out.force(false);
- }
- else
- {
- out = new FileOutputStream(log, true).getChannel();
- }
- return null;
- }
- });
+ out = PrivilegedFileHelper.fileOutputStream(log).getChannel();
+ out.position(1024 * fileSize - 1);
+ out.write(ByteBuffer.wrap(new byte[]{0}));
+ out.position(0);
+ out.force(false);
+ }
+ else
+ {
+ out = PrivilegedFileHelper.fileOutputStream(log, true).getChannel();
+ }
}
/**
@@ -137,14 +126,7 @@
public void append(final String action, final String uuid) throws IOException
{
initOut();
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- out.write(ByteBuffer.wrap((action + " " + uuid +
"\n").getBytes()));
- return null;
- }
- });
+ out.write(ByteBuffer.wrap((action + " " + uuid +
"\n").getBytes()));
}
/**
@@ -155,17 +137,10 @@
*/
public void flush() throws IOException
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
+ if (out != null)
{
- public Object run() throws Exception
- {
- if (out != null)
- {
- out.force(false);
- }
- return null;
- }
- });
+ out.force(false);
+ }
}
/**
@@ -176,23 +151,16 @@
*/
public void clear() throws IOException
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
+ if (out != null)
{
- public Object run() throws Exception
- {
- if (out != null)
- {
- out.truncate(0);
- out.close();
- out = new FileOutputStream(logFile).getChannel();
- out.position(1024 * fileSize - 1);
- out.write(ByteBuffer.wrap(new byte[]{0}));
- out.position(0);
- out.force(false);
- }
- return null;
- }
- });
+ out.truncate(0);
+ out.close();
+ out = PrivilegedFileHelper.fileOutputStream(logFile).getChannel();
+ out.position(1024 * fileSize - 1);
+ out.write(ByteBuffer.wrap(new byte[]{0}));
+ out.position(0);
+ out.force(false);
+ }
}
/**
@@ -203,18 +171,11 @@
*/
private void initOut() throws IOException
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
+ if (out == null)
{
- public Object run() throws Exception
- {
- if (out == null)
- {
- FileOutputStream os = new FileOutputStream(logFile, false);
- out = os.getChannel();
- }
- return null;
- }
- });
+ FileOutputStream os = PrivilegedFileHelper.fileOutputStream(logFile, false);
+ out = os.getChannel();
+ }
}
/**
@@ -225,42 +186,36 @@
*/
public List<String> readList() throws IOException
{
- return SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<List<String>>()
+ InputStream in = PrivilegedFileHelper.fileInputStream(logFile);
+ try
{
- public List<String> run() throws Exception
+ List<String> list = new ArrayList<String>();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+ String line;
+ while ((line = reader.readLine()) != null)
{
- InputStream in = new FileInputStream(logFile);
- try
+ if (!line.matches("\\x00++"))
{
- List<String> list = new ArrayList<String>();
- BufferedReader reader = new BufferedReader(new InputStreamReader(in));
- String line;
- while ((line = reader.readLine()) != null)
- {
- if (!line.matches("\\x00++"))
- {
- list.add(line);
- }
- }
- return list;
+ list.add(line);
+ }
+ }
+ return list;
+ }
+ finally
+ {
+ if (in != null)
+ {
+ try
+ {
+ in.close();
}
- finally
+ catch (IOException e)
{
- if (in != null)
- {
- try
- {
- in.close();
- }
- catch (IOException e)
- {
- LOG.warn("Exception while closing error log: " +
e.toString());
- }
- }
+ LOG.warn("Exception while closing error log: " + e.toString());
}
}
- });
+ }
}
public void readChanges(Set<String> rem, Set<String> add) throws
IOException
@@ -317,24 +272,17 @@
*/
public void close()
{
- SecurityHelper.doPrivilegedAction(new PrivilegedAction<Object>()
+ if (out != null)
{
- public Object run()
+ try
{
- if (out != null)
- {
- try
- {
- out.close();
- }
- catch (IOException e)
- {
- out = null;
- }
- }
- return null;
+ out.close();
}
- });
+ catch (IOException e)
+ {
+ out = null;
+ }
+ }
}
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -22,7 +22,6 @@
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.WildcardQuery;
import org.exoplatform.commons.utils.PrivilegedFileHelper;
-import org.exoplatform.commons.utils.SecurityHelper;
import org.exoplatform.container.ExoContainerContext;
import org.exoplatform.container.configuration.ConfigurationManager;
import org.exoplatform.management.annotations.Managed;
@@ -88,8 +87,6 @@
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
@@ -517,7 +514,7 @@
/**
* {@inheritDoc}
*/
- public void onSaveItems(ItemStateChangesLog itemStates)
+ public void onSaveItems(final ItemStateChangesLog itemStates)
{
//skip empty
if (itemStates.getSize() > 0)
@@ -1454,35 +1451,7 @@
if (handler instanceof Suspendable)
{
- PrivilegedExceptionAction<Object> action = new
PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- ((Suspendable)handler).resume();
- return null;
- }
- };
- try
- {
- SecurityHelper.doPrivilegedExceptionAction(action);
- }
- catch (PrivilegedActionException pae)
- {
- Throwable cause = pae.getCause();
-
- if (cause instanceof ResumeException)
- {
- throw (ResumeException)cause;
- }
- else if (cause instanceof RuntimeException)
- {
- throw (RuntimeException)cause;
- }
- else
- {
- throw new RuntimeException(cause);
- }
- }
+ ((Suspendable)handler).resume();
}
isSuspended = false;
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/ConsistencyCheck.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/ConsistencyCheck.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/ConsistencyCheck.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -17,14 +17,12 @@
package org.exoplatform.services.jcr.impl.core.query.lucene;
import org.apache.lucene.document.Document;
-import org.exoplatform.commons.utils.SecurityHelper;
import org.exoplatform.services.jcr.dataflow.ItemDataConsumer;
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
-import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
@@ -121,15 +119,8 @@
{
if (error.repairable())
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- // running in privileged mode
- error.repair();
- return null;
- }
- });
+ // running in privileged mode
+ error.repair();
}
else
{
@@ -180,7 +171,7 @@
Set multipleEntries = new HashSet();
// collect all documents UUIDs
documentUUIDs = new HashSet();
- final CachingMultiIndexReader reader = index.getIndexReader();
+ CachingMultiIndexReader reader = index.getIndexReader();
try
{
for (int i = 0; i < reader.maxDoc(); i++)
@@ -195,14 +186,7 @@
continue;
}
final int currentIndex = i;
- Document d = SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Document>()
- {
- public Document run() throws Exception
- {
- return reader.document(currentIndex, FieldSelectors.UUID);
- }
- });
-
+ Document d = reader.document(currentIndex, FieldSelectors.UUID);
String uuid = d.get(FieldNames.UUID);
if (stateMgr.getItemData(uuid) != null)
{
@@ -219,14 +203,7 @@
}
finally
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- reader.release();
- return null;
- }
- });
+ reader.release();
}
// create multiple entries errors
@@ -235,30 +212,23 @@
errors.add(new MultipleEntries((String)it.next()));
}
- final CachingMultiIndexReader newReader = index.getIndexReader();
+ reader = index.getIndexReader();
try
{
// run through documents again and check parent
- for (int i = 0; i < newReader.maxDoc(); i++)
+ for (int i = 0; i < reader.maxDoc(); i++)
{
- if (i > 10 && i % (newReader.maxDoc() / 5) == 0)
+ if (i > 10 && i % (reader.maxDoc() / 5) == 0)
{
- long progress = Math.round((100.0 * i) / (newReader.maxDoc() * 2f));
+ long progress = Math.round((100.0 * i) / (reader.maxDoc() * 2f));
log.info("progress: " + (progress + 50) + "%");
}
- if (newReader.isDeleted(i))
+ if (reader.isDeleted(i))
{
continue;
}
final int currentIndex = i;
- Document d = SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Document>()
- {
- public Document run() throws Exception
- {
- return newReader.document(currentIndex,
FieldSelectors.UUID_AND_PARENT);
- }
- });
-
+ Document d = reader.document(currentIndex, FieldSelectors.UUID_AND_PARENT);
String uuid = d.get(FieldNames.UUID);
String parentUUIDString = d.get(FieldNames.PARENT);
@@ -281,14 +251,7 @@
}
finally
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- newReader.release();
- return null;
- }
- });
+ reader.release();
}
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/FileBasedNamespaceMappings.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/FileBasedNamespaceMappings.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/FileBasedNamespaceMappings.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -16,17 +16,15 @@
*/
package org.exoplatform.services.jcr.impl.core.query.lucene;
-import org.exoplatform.commons.utils.SecurityHelper;
import org.exoplatform.commons.utils.PrivilegedFileHelper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.security.PrivilegedExceptionAction;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -37,7 +35,7 @@
/**
* The class <code>NamespaceMappings</code> implements a
- * {@link NamespaceResolver} that holds a namespace
+ * NamespaceResolver that holds a namespace
* mapping that is used internally in the search index. Storing paths with the
* full uri of a namespace would require too much space in the search index.
* <p/>
@@ -51,7 +49,7 @@
/**
* Default logger instance for this class
*/
- private static Logger log =
LoggerFactory.getLogger("exo.jcr.component.core.NamespaceMappings");
+ private static Log log =
ExoLogger.getLogger("exo.jcr.component.core.NamespaceMappings");
/**
* Location of the file that persists the uri / prefix mappings
@@ -149,40 +147,33 @@
*/
private void load() throws IOException
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
+ if (PrivilegedFileHelper.exists(storage))
{
- public Object run() throws Exception
+ InputStream in = PrivilegedFileHelper.fileInputStream(storage);
+ try
{
- if (storage.exists())
- {
- InputStream in = PrivilegedFileHelper.fileInputStream(storage);
- try
- {
- Properties props = new Properties();
- log.debug("loading namespace mappings...");
- props.load(in);
+ Properties props = new Properties();
+ log.debug("loading namespace mappings...");
+ props.load(in);
- // read mappings from properties
- Iterator iter = props.keySet().iterator();
- while (iter.hasNext())
- {
- String prefix = (String)iter.next();
- String uri = props.getProperty(prefix);
- log.debug(prefix + " -> " + uri);
- prefixToURI.put(prefix, uri);
- uriToPrefix.put(uri, prefix);
- }
- prefixCount = props.size();
- log.debug("namespace mappings loaded.");
- }
- finally
- {
- in.close();
- }
+ // read mappings from properties
+ Iterator iter = props.keySet().iterator();
+ while (iter.hasNext())
+ {
+ String prefix = (String)iter.next();
+ String uri = props.getProperty(prefix);
+ log.debug(prefix + " -> " + uri);
+ prefixToURI.put(prefix, uri);
+ uriToPrefix.put(uri, prefix);
}
- return null;
+ prefixCount = props.size();
+ log.debug("namespace mappings loaded.");
}
- });
+ finally
+ {
+ in.close();
+ }
+ }
}
/**
@@ -192,35 +183,28 @@
*/
private void store() throws IOException
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
+ Properties props = new Properties();
+
+ // store mappings in properties
+ Iterator iter = prefixToURI.keySet().iterator();
+ while (iter.hasNext())
{
- public Object run() throws Exception
- {
- Properties props = new Properties();
+ String prefix = (String)iter.next();
+ String uri = (String)prefixToURI.get(prefix);
+ props.setProperty(prefix, uri);
+ }
- // store mappings in properties
- Iterator iter = prefixToURI.keySet().iterator();
- while (iter.hasNext())
- {
- String prefix = (String)iter.next();
- String uri = (String)prefixToURI.get(prefix);
- props.setProperty(prefix, uri);
- }
-
- OutputStream out = PrivilegedFileHelper.fileOutputStream(storage);
- try
- {
- out = new BufferedOutputStream(out);
- props.store(out, null);
- }
- finally
- {
- // make sure stream is closed
- out.close();
- }
- return null;
- }
- });
+ OutputStream out = PrivilegedFileHelper.fileOutputStream(storage);
+ try
+ {
+ out = new BufferedOutputStream(out);
+ props.store(out, null);
+ }
+ finally
+ {
+ // make sure stream is closed
+ out.close();
+ }
}
public String[] getAllNamespacePrefixes() throws RepositoryException
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/IndexingQueue.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/IndexingQueue.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/IndexingQueue.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -19,12 +19,10 @@
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermDocs;
-import org.exoplatform.commons.utils.SecurityHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
-import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -79,60 +77,52 @@
*/
void initialize(final MultiIndex index) throws IOException
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
+ if (initialized)
{
- public Object run() throws Exception
+ throw new IllegalStateException("already initialized");
+ }
+ // check index for nodes that need to be reindexed
+ CachingMultiIndexReader reader = index.getIndexReader();
+ try
+ {
+ TermDocs tDocs = reader.termDocs(new Term(FieldNames.REINDEXING_REQUIRED,
""));
+ try
{
- if (initialized)
+ while (tDocs.next())
{
- throw new IllegalStateException("already initialized");
+ queueStore.addUUID(reader.document(tDocs.doc(),
FieldSelectors.UUID).get(FieldNames.UUID));
}
- // check index for nodes that need to be reindexed
- CachingMultiIndexReader reader = index.getIndexReader();
- try
- {
- TermDocs tDocs = reader.termDocs(new Term(FieldNames.REINDEXING_REQUIRED,
""));
- try
- {
- while (tDocs.next())
- {
- queueStore.addUUID(reader.document(tDocs.doc(),
FieldSelectors.UUID).get(FieldNames.UUID));
- }
- }
- finally
- {
- tDocs.close();
- }
- }
- finally
- {
- reader.release();
- }
- String[] uuids = queueStore.getPending();
- for (int i = 0; i < uuids.length; i++)
- {
- try
- {
- Document doc = index.createDocument(uuids[i]);
- pendingDocuments.put(uuids[i], doc);
- log.debug("added node {}. New size of indexing queue: {}",
uuids[i], new Integer(pendingDocuments
- .size()));
- }
- catch (IllegalArgumentException e)
- {
- log.warn("Invalid UUID in indexing queue store: " +
uuids[i]);
- }
- catch (RepositoryException e)
- {
- // node does not exist anymore
- log.debug("Node with uuid {} does not exist anymore",
uuids[i]);
- queueStore.removeUUID(uuids[i]);
- }
- }
- initialized = true;
- return null;
}
- });
+ finally
+ {
+ tDocs.close();
+ }
+ }
+ finally
+ {
+ reader.release();
+ }
+ String[] uuids = queueStore.getPending();
+ for (int i = 0; i < uuids.length; i++)
+ {
+ try
+ {
+ Document doc = index.createDocument(uuids[i]);
+ pendingDocuments.put(uuids[i], doc);
+ log.debug("added node {}. New size of indexing queue: {}",
uuids[i], new Integer(pendingDocuments.size()));
+ }
+ catch (IllegalArgumentException e)
+ {
+ log.warn("Invalid UUID in indexing queue store: " + uuids[i]);
+ }
+ catch (RepositoryException e)
+ {
+ // node does not exist anymore
+ log.debug("Node with uuid {} does not exist anymore", uuids[i]);
+ queueStore.removeUUID(uuids[i]);
+ }
+ }
+ initialized = true;
}
/**
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/IndexingQueueStore.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/IndexingQueueStore.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/IndexingQueueStore.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -17,7 +17,6 @@
package org.exoplatform.services.jcr.impl.core.query.lucene;
import org.apache.lucene.store.Directory;
-import org.exoplatform.commons.utils.SecurityHelper;
import org.exoplatform.services.jcr.impl.core.query.lucene.directory.IndexInputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -26,8 +25,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedExceptionAction;
import java.util.HashSet;
import java.util.Set;
@@ -121,27 +118,20 @@
*/
public void close()
{
- SecurityHelper.doPrivilegedAction(new PrivilegedAction<Object>()
+ if (pending.isEmpty())
{
- public Object run()
+ try
{
- if (pending.isEmpty())
+ if (dir.fileExists(INDEXING_QUEUE_FILE))
{
- try
- {
- if (dir.fileExists(INDEXING_QUEUE_FILE))
- {
- dir.deleteFile(INDEXING_QUEUE_FILE);
- }
- }
- catch (IOException e)
- {
- log.warn("unable to delete " + INDEXING_QUEUE_FILE);
- }
+ dir.deleteFile(INDEXING_QUEUE_FILE);
}
- return null;
}
- });
+ catch (IOException e)
+ {
+ log.warn("unable to delete " + INDEXING_QUEUE_FILE);
+ }
+ }
}
//----------------------------< internal >----------------------------------
@@ -154,52 +144,45 @@
*/
private void readStore() throws IOException
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
+ if (dir.fileExists(INDEXING_QUEUE_FILE))
{
- public Object run() throws Exception
+ InputStream in = new IndexInputStream(dir.openInput(INDEXING_QUEUE_FILE));
+ BufferedReader reader = new BufferedReader(new InputStreamReader(in,
ENCODING));
+ try
{
- if (dir.fileExists(INDEXING_QUEUE_FILE))
+ String line;
+ while ((line = reader.readLine()) != null)
{
- InputStream in = new
IndexInputStream(dir.openInput(INDEXING_QUEUE_FILE));
- BufferedReader reader = new BufferedReader(new InputStreamReader(in,
ENCODING));
- try
+ int idx = line.indexOf(' ');
+ if (idx == -1)
{
- String line;
- while ((line = reader.readLine()) != null)
+ // invalid line
+ log.warn("invalid line in {}: {}", INDEXING_QUEUE_FILE,
line);
+ }
+ else
+ {
+ String cmd = line.substring(0, idx);
+ String uuid = line.substring(idx + 1, line.length());
+ if (ADD.equals(cmd))
{
- int idx = line.indexOf(' ');
- if (idx == -1)
- {
- // invalid line
- log.warn("invalid line in {}: {}", INDEXING_QUEUE_FILE,
line);
- }
- else
- {
- String cmd = line.substring(0, idx);
- String uuid = line.substring(idx + 1, line.length());
- if (ADD.equals(cmd))
- {
- pending.add(uuid);
- }
- else if (REMOVE.equals(cmd))
- {
- pending.remove(uuid);
- }
- else
- {
- // invalid line
- log.warn("invalid line in {}: {}",
INDEXING_QUEUE_FILE, line);
- }
- }
+ pending.add(uuid);
}
+ else if (REMOVE.equals(cmd))
+ {
+ pending.remove(uuid);
+ }
+ else
+ {
+ // invalid line
+ log.warn("invalid line in {}: {}", INDEXING_QUEUE_FILE,
line);
+ }
}
- finally
- {
- in.close();
- }
}
- return null;
}
- });
+ finally
+ {
+ in.close();
+ }
+ }
}
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/MultiIndex.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/MultiIndex.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/MultiIndex.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -350,21 +350,14 @@
// set index format version and at the same time
// initialize hierarchy cache if requested.
- final CachingMultiIndexReader reader =
getIndexReader(handler.isInitializeHierarchyCache());
+ CachingMultiIndexReader reader =
getIndexReader(handler.isInitializeHierarchyCache());
try
{
version = IndexFormatVersion.getVersion(reader);
}
finally
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- reader.release();
- return null;
- }
- });
+ reader.release();
}
indexingQueue.initialize(this);
if (modeHandler.getMode() == IndexerIoMode.READ_WRITE)
@@ -406,21 +399,14 @@
}
else
{
- final CachingMultiIndexReader reader = getIndexReader();
+ CachingMultiIndexReader reader = getIndexReader();
try
{
return reader.numDocs();
}
finally
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- reader.release();
- return null;
- }
- });
+ reader.release();
}
}
}
@@ -473,8 +459,8 @@
}
else
{
- log.info("Index can'b be retrieved from coordinator now,
because it is offline. " +
- "Possibly coordinator node performs reindexing now.
Switching to local re-indexing.");
+ log.info("Index can'b be retrieved from coordinator now,
because it is offline. "
+ + "Possibly coordinator node performs reindexing now. Switching
to local re-indexing.");
}
}
@@ -484,13 +470,13 @@
{
if (handler.getContext().getRPCService() == null)
{
- log.error("RPC Service is not configured but required for
copying the index " +
- "from coordinator node. Index will be created by
re-indexing.");
+ log.error("RPC Service is not configured but required for
copying the index "
+ + "from coordinator node. Index will be created by
re-indexing.");
}
else if (handler.getContext().getRPCService().isCoordinator() == true)
{
- log.info("Copying the index from coordinator configured, but
this node is the " +
- "only one in a cluster. Index will be created by
re-indexing.");
+ log.info("Copying the index from coordinator configured, but
this node is the "
+ + "only one in a cluster. Index will be created by
re-indexing.");
}
}
@@ -759,76 +745,69 @@
*/
private void doUpdateRW(final Collection<String> remove, final
Collection<Document> add) throws IOException
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
+ // make sure a reader is available during long updates
+ if (add.size() > handler.getBufferSize())
{
- public Object run() throws Exception
+ try
{
- // make sure a reader is available during long updates
- if (add.size() > handler.getBufferSize())
+ releaseMultiReader();
+ }
+ catch (IOException e)
+ {
+ // do not fail if an exception is thrown here
+ log.warn("unable to prepare index reader " + "for queries
during update", e);
+ }
+ }
+
+ synchronized (updateMonitor)
+ {
+ //updateInProgress = true;
+ indexUpdateMonitor.setUpdateInProgress(true, false);
+ }
+ boolean flush = false;
+ try
+ {
+ long transactionId = nextTransactionId++;
+ executeAndLog(new Start(transactionId));
+
+ for (Iterator<String> it = remove.iterator(); it.hasNext();)
+ {
+ executeAndLog(new DeleteNode(transactionId, it.next()));
+ }
+ for (Iterator<Document> it = add.iterator(); it.hasNext();)
+ {
+ Document doc = it.next();
+ if (doc != null)
{
- try
- {
- releaseMultiReader();
- }
- catch (IOException e)
- {
- // do not fail if an exception is thrown here
- log.warn("unable to prepare index reader " + "for
queries during update", e);
- }
+ executeAndLog(new AddNode(transactionId, doc));
+ // commit volatile index if needed
+ flush |= checkVolatileCommit();
}
+ }
+ executeAndLog(new Commit(transactionId));
+ // flush whole index when volatile index has been commited.
+ if (flush)
+ {
+ // if we are going to flush, need to set persistent update
synchronized (updateMonitor)
{
- //updateInProgress = true;
- indexUpdateMonitor.setUpdateInProgress(true, false);
+ indexUpdateMonitor.setUpdateInProgress(true, true);
}
- boolean flush = false;
- try
- {
- long transactionId = nextTransactionId++;
- executeAndLog(new Start(transactionId));
+ flush();
+ }
+ }
+ finally
+ {
+ synchronized (updateMonitor)
+ {
+ //updateInProgress = false;
- for (Iterator<String> it = remove.iterator(); it.hasNext();)
- {
- executeAndLog(new DeleteNode(transactionId, it.next()));
- }
- for (Iterator<Document> it = add.iterator(); it.hasNext();)
- {
- Document doc = it.next();
- if (doc != null)
- {
- executeAndLog(new AddNode(transactionId, doc));
- // commit volatile index if needed
- flush |= checkVolatileCommit();
- }
- }
- executeAndLog(new Commit(transactionId));
-
- // flush whole index when volatile index has been commited.
- if (flush)
- {
- // if we are going to flush, need to set persistent update
- synchronized (updateMonitor)
- {
- indexUpdateMonitor.setUpdateInProgress(true, true);
- }
- flush();
- }
- }
- finally
- {
- synchronized (updateMonitor)
- {
- //updateInProgress = false;
-
- indexUpdateMonitor.setUpdateInProgress(false, flush);
- updateMonitor.notifyAll();
- releaseMultiReader();
- }
- }
- return null;
+ indexUpdateMonitor.setUpdateInProgress(false, flush);
+ updateMonitor.notifyAll();
+ releaseMultiReader();
}
- });
+ }
}
private void invokeOfflineIndex() throws IOException
@@ -1158,18 +1137,11 @@
{
time = System.currentTimeMillis();
}
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- index.getReadOnlyIndexReader(true).release();
- return null;
- }
- });
+ index.getReadOnlyIndexReader(true).release();
if (log.isDebugEnabled())
{
time = System.currentTimeMillis() - time;
- log.debug("hierarchy cache initialized in {} ms", new Long(time));
+ log.debug("hierarchy cache initialized in {} ms", new Long(time));
}
}
@@ -1559,22 +1531,22 @@
}
}
}
- executeAndLog(new Commit(getTransactionId()));
-
- indexNames.write();
+ executeAndLog(new Commit(getTransactionId()));
- // reset redo log
- redoLog.clear();
+ indexNames.write();
- lastFlushTime = System.currentTimeMillis();
- lastFileSystemFlushTime = System.currentTimeMillis();
- }
+ // reset redo log
+ redoLog.clear();
- // delete obsolete indexes
- attemptDelete();
- return null;
- }
- });
+ lastFlushTime = System.currentTimeMillis();
+ lastFileSystemFlushTime = System.currentTimeMillis();
+ }
+
+ // delete obsolete indexes
+ attemptDelete();
+ return null;
+ }
+ });
}
/**
@@ -1649,35 +1621,28 @@
*/
private void scheduleFlushTask()
{
- SecurityHelper.doPrivilegedAction(new PrivilegedAction<Object>()
+ // cancel task
+ if (flushTask != null)
{
- public Object run()
+ flushTask.cancel();
+ }
+ // clear canceled tasks
+ FLUSH_TIMER.purge();
+ // new flush task, cause canceled can't be re-used
+ flushTask = new TimerTask()
+ {
+ @Override
+ public void run()
{
- // cancel task
- if (flushTask != null)
- {
- flushTask.cancel();
- }
- // clear canceled tasks
- FLUSH_TIMER.purge();
- // new flush task, cause canceled can't be re-used
- flushTask = new TimerTask()
- {
- @Override
- public void run()
- {
- // check if there are any indexing jobs finished
- checkIndexingQueue();
- // check if volatile index should be flushed
- checkFlush();
- }
- };
- FLUSH_TIMER.schedule(flushTask, 0, 1000);
- lastFlushTime = System.currentTimeMillis();
- lastFileSystemFlushTime = System.currentTimeMillis();
- return null;
+ // check if there are any indexing jobs finished
+ checkIndexingQueue();
+ // check if volatile index should be flushed
+ checkFlush();
}
- });
+ };
+ FLUSH_TIMER.schedule(flushTask, 0, 1000);
+ lastFlushTime = System.currentTimeMillis();
+ lastFileSystemFlushTime = System.currentTimeMillis();
}
/**
@@ -1783,7 +1748,7 @@
if (log.isDebugEnabled())
{
time = System.currentTimeMillis() - time;
- log.debug("Committed in-memory index in " + time +
"ms.");
+ log.debug("Committed in-memory index in " + time +
"ms.");
}
}
}
@@ -2046,25 +2011,18 @@
*/
private void removeDeletable()
{
- SecurityHelper.doPrivilegedAction(new PrivilegedAction<Object>()
+ String fileName = "deletable";
+ try
{
- public Object run()
+ if (indexDir.fileExists(fileName))
{
- String fileName = "deletable";
- try
- {
- if (indexDir.fileExists(fileName))
- {
- indexDir.deleteFile(fileName);
- }
- }
- catch (IOException e)
- {
- log.warn("Unable to remove file 'deletable'.", e);
- }
- return null;
+ indexDir.deleteFile(fileName);
}
- });
+ }
+ catch (IOException e)
+ {
+ log.warn("Unable to remove file 'deletable'.", e);
+ }
}
/**
@@ -2540,8 +2498,8 @@
/**
* The maximum length of a AddNode String.
*/
- private static final int ENTRY_LENGTH =
- Long.toString(Long.MAX_VALUE).length() + Action.ADD_NODE.length() +
Constants.UUID_FORMATTED_LENGTH + 2;
+ private static final int ENTRY_LENGTH = Long.toString(Long.MAX_VALUE).length() +
Action.ADD_NODE.length()
+ + Constants.UUID_FORMATTED_LENGTH + 2;
/**
* The uuid of the node to add.
@@ -2942,8 +2900,8 @@
/**
* The maximum length of a DeleteNode String.
*/
- private static final int ENTRY_LENGTH =
- Long.toString(Long.MAX_VALUE).length() + Action.DELETE_NODE.length() +
Constants.UUID_FORMATTED_LENGTH + 2;
+ private static final int ENTRY_LENGTH = Long.toString(Long.MAX_VALUE).length() +
Action.DELETE_NODE.length()
+ + Constants.UUID_FORMATTED_LENGTH + 2;
/**
* The uuid of the node to remove.
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/PersistentIndex.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/PersistentIndex.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/PersistentIndex.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -23,11 +23,9 @@
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IndexInput;
import org.apache.lucene.store.IndexOutput;
-import org.exoplatform.commons.utils.SecurityHelper;
import org.exoplatform.services.jcr.impl.core.query.lucene.directory.DirectoryManager;
import java.io.IOException;
-import java.security.PrivilegedExceptionAction;
/**
* Implements a lucene index which is based on a
@@ -64,14 +62,7 @@
this.name = name;
if (isExisting())
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- IndexMigration.migrate(PersistentIndex.this, directoryManager);
- return null;
- }
- });
+ IndexMigration.migrate(PersistentIndex.this, directoryManager);
}
}
@@ -98,17 +89,10 @@
* @param readers the readers of indexes to add.
* @throws IOException if an error occurs while adding indexes.
*/
- void addIndexes(final IndexReader[] readers) throws IOException
+ void addIndexes(IndexReader[] readers) throws IOException
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- getIndexWriter().addIndexes(readers);
- getIndexWriter().optimize();
- return null;
- }
- });
+ getIndexWriter().addIndexes(readers);
+ getIndexWriter().optimize();
}
/**
@@ -121,47 +105,40 @@
*/
void copyIndex(final AbstractIndex index) throws IOException
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
+ // commit changes to directory on other index.
+ index.commit(true);
+ // simply copy over the files
+ byte[] buffer = new byte[1024];
+ Directory dir = index.getDirectory();
+ Directory dest = getDirectory();
+ String[] files = dir.list();
+ for (int i = 0; i < files.length; i++)
{
- public Object run() throws Exception
+ IndexInput in = dir.openInput(files[i]);
+ try
{
- // commit changes to directory on other index.
- index.commit(true);
- // simply copy over the files
- byte[] buffer = new byte[1024];
- Directory dir = index.getDirectory();
- Directory dest = getDirectory();
- String[] files = dir.list();
- for (int i = 0; i < files.length; i++)
+ IndexOutput out = dest.createOutput(files[i]);
+ try
{
- IndexInput in = dir.openInput(files[i]);
- try
+ long remaining = in.length();
+ while (remaining > 0)
{
- IndexOutput out = dest.createOutput(files[i]);
- try
- {
- long remaining = in.length();
- while (remaining > 0)
- {
- int num = (int)Math.min(remaining, buffer.length);
- in.readBytes(buffer, 0, num);
- out.writeBytes(buffer, num);
- remaining -= num;
- }
- }
- finally
- {
- out.close();
- }
+ int num = (int)Math.min(remaining, buffer.length);
+ in.readBytes(buffer, 0, num);
+ out.writeBytes(buffer, num);
+ remaining -= num;
}
- finally
- {
- in.close();
- }
}
- return null;
+ finally
+ {
+ out.close();
+ }
}
- });
+ finally
+ {
+ in.close();
+ }
+ }
}
/**
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/SearchIndex.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -76,8 +76,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -585,39 +583,13 @@
{
indexDirectory = new File(path);
- try
- {
- SecurityHelper.doPrivilegedExceptionAction((new
PrivilegedExceptionAction<Object>()
+ if (!indexDirectory.exists())
{
- public Object run() throws Exception
+ if (!indexDirectory.mkdirs())
{
- if (!indexDirectory.exists())
- {
- if (!indexDirectory.mkdirs())
- {
- throw new RepositoryException("fail to create index dir
" + path);
- }
- }
- return null;
+ throw new RepositoryException("fail to create index dir " +
path);
}
- }));
- }
- catch (PrivilegedActionException pae)
- {
- Throwable cause = pae.getCause();
- if (cause instanceof RepositoryException)
- {
- throw (RepositoryException)cause;
}
- else if (cause instanceof RuntimeException)
- {
- throw (RuntimeException)cause;
- }
- else
- {
- throw new RuntimeException(cause);
- }
- }
}
else
{
@@ -644,16 +616,9 @@
else
{
// read local namespace mappings
- final File mapFile = new File(indexDirectory, NS_MAPPING_FILE);
- boolean fileExists = SecurityHelper.doPrivilegedAction(new
PrivilegedAction<Boolean>()
+ File mapFile = new File(indexDirectory, NS_MAPPING_FILE);
+ if (mapFile.exists())
{
- public Boolean run()
- {
- return mapFile.exists();
- }
- });
- if (fileExists)
- {
// be backward compatible and use ns_mappings.properties from
// index folder
nsMappings = new FileBasedNamespaceMappings(mapFile);
@@ -1597,15 +1562,8 @@
{
try
{
- spCheck = SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<SpellChecker>()
- {
- public SpellChecker run() throws Exception
- {
- SpellChecker spCheck = spellCheckerClass.newInstance();
- spCheck.init(SearchIndex.this, spellCheckerMinDistance,
spellCheckerMorePopular);
- return spCheck;
- }
- });
+ spCheck = spellCheckerClass.newInstance();
+ spCheck.init(SearchIndex.this, spellCheckerMinDistance,
spellCheckerMorePopular);
}
catch (Exception e)
{
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/Util.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/Util.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/Util.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -21,7 +21,6 @@
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.Query;
-import org.exoplatform.commons.utils.SecurityHelper;
import org.exoplatform.services.jcr.datamodel.IllegalNameException;
import org.exoplatform.services.jcr.datamodel.QPathEntry;
import org.exoplatform.services.jcr.datamodel.ValueData;
@@ -31,7 +30,6 @@
import java.io.IOException;
import java.io.UnsupportedEncodingException;
-import java.security.PrivilegedExceptionAction;
import java.util.Iterator;
import java.util.regex.Pattern;
@@ -151,21 +149,14 @@
*/
public static void closeOrRelease(final IndexReader reader) throws IOException
{
- SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Object>()
+ if (reader instanceof ReleaseableIndexReader)
{
- public Object run() throws Exception
- {
- if (reader instanceof ReleaseableIndexReader)
- {
- ((ReleaseableIndexReader)reader).release();
- }
- else
- {
- reader.close();
- }
- return null;
- }
- });
+ ((ReleaseableIndexReader)reader).release();
+ }
+ else
+ {
+ reader.close();
+ }
}
/**
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/VolatileIndex.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/VolatileIndex.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/VolatileIndex.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -16,9 +16,6 @@
*/
package org.exoplatform.services.jcr.impl.core.query.lucene;
-import java.io.IOException;
-import java.util.Map;
-
import org.apache.commons.collections.map.LinkedMap;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
@@ -26,6 +23,9 @@
import org.apache.lucene.search.Similarity;
import org.apache.lucene.store.RAMDirectory;
+import java.io.IOException;
+import java.util.Map;
+
/**
* Implements an in-memory index with a pending buffer.
*/
@@ -114,7 +114,7 @@
else
{
// remove document from index
- num = super.removeDocument(idTerm);
+ num = super.getIndexReader().deleteDocuments(idTerm);
}
numDocs -= num;
return num;
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/spell/LuceneSpellChecker.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/spell/LuceneSpellChecker.java 2011-07-14
10:11:06 UTC (rev 4631)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/spell/LuceneSpellChecker.java 2011-07-14
11:25:59 UTC (rev 4632)
@@ -506,9 +506,16 @@
try
{
long time = System.currentTimeMillis();
- Dictionary dict = new LuceneDictionary(reader,
FieldNames.FULLTEXT);
+ final Dictionary dict = new LuceneDictionary(reader,
FieldNames.FULLTEXT);
log.debug("Starting spell checker index
refresh");
- spellChecker.indexDictionary(dict);
+ SecurityHelper.doPrivilegedIOExceptionAction(new
PrivilegedExceptionAction<Void>()
+ {
+ public Void run() throws IOException
+ {
+ spellChecker.indexDictionary(dict);
+ return null;
+ }
+ });
time = System.currentTimeMillis() - time;
time = time / 1000;
log.info("Spell checker index refreshed in:
" + new Long(time) + " s.");