vigyasharma commented on code in PR #14335:
URL: https://github.com/apache/lucene/pull/14335#discussion_r2001826532


##########
lucene/core/src/java/org/apache/lucene/index/MultiTenantMergeScheduler.java:
##########
@@ -0,0 +1,70 @@
+package org.apache.lucene.index;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.io.IOException;
+
+/**
+ * A multi-tenant merge scheduler that shares a global thread pool across 
multiple IndexWriters.
+ */
+public class MultiTenantMergeScheduler extends MergeScheduler {
+
+    // Shared global thread pool
+    private static final ExecutorService MERGE_THREAD_POOL = 
Executors.newFixedThreadPool(
+        Runtime.getRuntime().availableProcessors() / 2
+    );
+
+    // Track active merges per writer
+    private final List<Future<?>> activeMerges = 
Collections.synchronizedList(new ArrayList<>());
+
+    @Override
+    public void merge(MergeScheduler.MergeSource mergeSource, MergeTrigger 
trigger) throws IOException {
+        while (true) {
+            MergePolicy.OneMerge merge = mergeSource.getNextMerge();
+            if (merge == null) break;  // No more merges
+            
+            // Submit merge task and track future
+            Future<?> future = MERGE_THREAD_POOL.submit(() -> {
+                try {
+                    mergeSource.merge(merge);
+                } catch (IOException e) {
+                    throw new RuntimeException("Merge operation failed", e);
+                }
+            });
+
+            activeMerges.add(future);
+            
+            // Cleanup completed merges
+            activeMerges.removeIf(Future::isDone);
+        }
+    }
+
+    private final ConcurrentHashMap<IndexWriter, List<Merge>> activeMerges = 
new ConcurrentHashMap<>();
+
+    @Override
+    public void close() throws IOException {
+        IndexWriter currentWriter = getCurrentIndexWriter();  // Method to get 
the calling writer
+        List<Merge> merges = activeMerges.getOrDefault(currentWriter, 
Collections.emptyList());
+    
+        for (Merge merge : merges) {
+            merge.waitForCompletion(); // Only wait for merges related to this 
writer
+        }
+    
+        activeMerges.remove(currentWriter); // Cleanup after closing

Review Comment:
   This doesn't line up, `activeMerges` is a List, you're calling Map APIs on 
it. Did this compile?



##########
lucene/core/src/java/org/apache/lucene/index/MultiTenantMergeScheduler.java:
##########
@@ -0,0 +1,70 @@
+package org.apache.lucene.index;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.io.IOException;
+
+/**
+ * A multi-tenant merge scheduler that shares a global thread pool across 
multiple IndexWriters.
+ */
+public class MultiTenantMergeScheduler extends MergeScheduler {
+
+    // Shared global thread pool
+    private static final ExecutorService MERGE_THREAD_POOL = 
Executors.newFixedThreadPool(
+        Runtime.getRuntime().availableProcessors() / 2
+    );
+
+    // Track active merges per writer
+    private final List<Future<?>> activeMerges = 
Collections.synchronizedList(new ArrayList<>());
+
+    @Override
+    public void merge(MergeScheduler.MergeSource mergeSource, MergeTrigger 
trigger) throws IOException {
+        while (true) {
+            MergePolicy.OneMerge merge = mergeSource.getNextMerge();
+            if (merge == null) break;  // No more merges
+            
+            // Submit merge task and track future
+            Future<?> future = MERGE_THREAD_POOL.submit(() -> {
+                try {
+                    mergeSource.merge(merge);
+                } catch (IOException e) {
+                    throw new RuntimeException("Merge operation failed", e);
+                }
+            });
+
+            activeMerges.add(future);
+            
+            // Cleanup completed merges
+            activeMerges.removeIf(Future::isDone);
+        }
+    }
+
+    private final ConcurrentHashMap<IndexWriter, List<Merge>> activeMerges = 
new ConcurrentHashMap<>();
+
+    @Override
+    public void close() throws IOException {
+        IndexWriter currentWriter = getCurrentIndexWriter();  // Method to get 
the calling writer

Review Comment:
   This is not defined anywhere!



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to