From 2d1258dd7ca7ba82f328e2c1d2b3c7aa8b2ba746 Mon Sep 17 00:00:00 2001 From: Andrew Hind Date: Fri, 17 Feb 2006 11:12:36 +0000 Subject: [PATCH] only check and clear write locks (not commit locks) git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2424 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/search/impl/lucene/LuceneBase.java | 39 ++++++++++++++++--- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneBase.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneBase.java index 0b2c870fb9..e5ecfae529 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneBase.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneBase.java @@ -860,6 +860,20 @@ public abstract class LuceneBase implements Lockable getLuceneIndexLock().getReadLock(store); } + public static boolean isWriteLocked(String directory) throws IOException + { + Directory dir = FSDirectory.getDirectory(directory, false); + boolean result = isWriteLocked(dir); + dir.close(); + return result; + } + + public static boolean isWriteLocked(Directory directory) throws IOException + { + return directory.makeLock(IndexWriter.WRITE_LOCK_NAME).isLocked(); + + } + private int writeLockCount = 0; public void getWriteLock() throws LuceneIndexException @@ -870,11 +884,18 @@ public abstract class LuceneBase implements Lockable // We must have the lock try { - if (((writeLockCount == 1) && IndexReader.indexExists(baseDir) && (IndexReader.isLocked(baseDir.getPath())))) + if (((writeLockCount == 1) && IndexReader.indexExists(baseDir) && (LuceneBase.isWriteLocked(baseDir + .getPath())))) { Directory dir = FSDirectory.getDirectory(baseDir, false); - IndexReader.unlock(dir); - dir.close(); + try + { + dir.makeLock(IndexWriter.WRITE_LOCK_NAME).release(); + } + finally + { + dir.close(); + } s_logger.warn("Releasing unexpected lucene index write lock for " + baseDir); StackTraceElement[] trace = Thread.currentThread().getStackTrace(); for (StackTraceElement el : trace) @@ -902,12 +923,18 @@ public abstract class LuceneBase implements Lockable { try { - if (((writeLockCount == 1) && IndexReader.indexExists(baseDir) && (IndexReader.isLocked(baseDir + if (((writeLockCount == 1) && IndexReader.indexExists(baseDir) && (LuceneBase.isWriteLocked(baseDir .getPath())))) { Directory dir = FSDirectory.getDirectory(baseDir, false); - IndexReader.unlock(dir); - dir.close(); + try + { + dir.makeLock(IndexWriter.WRITE_LOCK_NAME).release(); + } + finally + { + dir.close(); + } } } catch (IOException e)