Author: chetanm
Date: Mon Nov  7 08:46:51 2016
New Revision: 1768454

URL: http://svn.apache.org/viewvc?rev=1768454&view=rev
Log:
OAK-5075 - Refactor IndexCopier to make it more modular

Simplify state handling of index files being written

Modified:
    
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java
    
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java
    
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectory.java

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java?rev=1768454&r1=1768453&r2=1768454&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexCopier.java
 Mon Nov  7 08:46:51 2016
@@ -117,14 +117,13 @@ public class IndexCopier implements Copy
     public Directory wrapForRead(String indexPath, IndexDefinition definition,
                                  Directory remote, String dirName) throws 
IOException {
         Directory local = createLocalDirForIndexReader(indexPath, definition, 
dirName);
-        return new CopyOnReadDirectory(this, remote, local, prefetchEnabled, 
indexPath, getSharedWorkingSet(indexPath), executor);
+        return new CopyOnReadDirectory(this, remote, local, prefetchEnabled, 
indexPath, executor);
     }
 
     public Directory wrapForWrite(IndexDefinition definition, Directory 
remote, boolean reindexMode, String dirName) throws IOException {
         Directory local = createLocalDirForIndexWriter(definition, dirName);
         String indexPath = definition.getIndexPathFromConfig();
-        return new CopyOnWriteDirectory(this, remote, local, reindexMode,
-                indexPath, 
getSharedWorkingSet(definition.getIndexPathFromConfig()), executor);
+        return new CopyOnWriteDirectory(this, remote, local, reindexMode, 
indexPath, executor);
     }
 
     @Override
@@ -172,6 +171,19 @@ public class IndexCopier implements Copy
         return indexRootDirectory.getIndexDir(definition, indexPath, dirName);
     }
 
+    public void addIndexFileBeingWritten(String indexPath, String name) {
+        getSharedWorkingSet(indexPath).add(name);
+    }
+
+    public void clearIndexFilesBeingWritten(String indexPath) {
+        //TODO This should also be removed at start i.e. open of 
CopyOnWriteDirectory
+        getSharedWorkingSet(indexPath).clear();
+    }
+
+    public Set<String> getIndexFilesBeingWritten(String indexPath) {
+        return getSharedWorkingSet(indexPath);
+    }
+
     Map<String, LocalIndexFile> getFailedToDeleteFiles() {
         return Collections.unmodifiableMap(failedToDeleteFiles);
     }

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java?rev=1768454&r1=1768453&r2=1768454&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java
 Mon Nov  7 08:46:51 2016
@@ -65,7 +65,7 @@ public class CopyOnReadDirectory extends
     private final Set<String> localFileNames = Sets.newConcurrentHashSet();
 
     public CopyOnReadDirectory(IndexCopier indexCopier, Directory remote, 
Directory local, boolean prefetch,
-                               String indexPath, Set<String> sharedWorkingSet, 
Executor executor) throws IOException {
+                               String indexPath, Executor executor) throws 
IOException {
         super(remote);
         this.indexCopier = indexCopier;
         this.executor = executor;
@@ -75,7 +75,7 @@ public class CopyOnReadDirectory extends
 
         this.localFileNames.addAll(Arrays.asList(local.listAll()));
         //Remove files which are being worked upon by COW
-        this.localFileNames.removeAll(sharedWorkingSet);
+        
this.localFileNames.removeAll(indexCopier.getIndexFilesBeingWritten(indexPath));
 
         if (prefetch) {
             prefetchIndexFiles();

Modified: 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectory.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectory.java?rev=1768454&r1=1768453&r2=1768454&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectory.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnWriteDirectory.java
 Mon Nov  7 08:46:51 2016
@@ -80,7 +80,6 @@ public class CopyOnWriteDirectory extend
     private final CountDownLatch copyDone = new CountDownLatch(1);
     private final boolean reindexMode;
     private final String indexPath;
-    private final Set<String> sharedWorkingSet;
 
     /**
      * Current background task
@@ -135,7 +134,7 @@ public class CopyOnWriteDirectory extend
     };
 
     public CopyOnWriteDirectory(IndexCopier indexCopier, Directory remote, 
Directory local, boolean reindexMode,
-                                String indexPath, Set<String> 
sharedWorkingSet, Executor executor) throws
+                                String indexPath, Executor executor) throws
             IOException {
         super(local);
         this.indexCopier = indexCopier;
@@ -144,7 +143,6 @@ public class CopyOnWriteDirectory extend
         this.executor = executor;
         this.indexPath = indexPath;
         this.reindexMode = reindexMode;
-        this.sharedWorkingSet = sharedWorkingSet;
         initialize();
     }
 
@@ -184,7 +182,7 @@ public class CopyOnWriteDirectory extend
         }
         ref = new COWLocalFileReference(name);
         fileMap.put(name, ref);
-        sharedWorkingSet.add(name);
+        indexCopier.addIndexFileBeingWritten(indexPath, name);
         return ref.createOutput(context);
     }
 
@@ -261,7 +259,7 @@ public class CopyOnWriteDirectory extend
 
         local.close();
         remote.close();
-        sharedWorkingSet.clear();
+        indexCopier.clearIndexFilesBeingWritten(indexPath);
     }
 
     @Override


Reply via email to