This is an automated email from the ASF dual-hosted git repository.

rnewson pushed a commit to branch nouveau-indexmanager-improvements
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 378db0941428d8002774a90904c73c88da41ae3f
Author: Robert Newson <[email protected]>
AuthorDate: Wed Oct 4 11:55:30 2023 +0100

    inject caffeine scheduler from application config
---
 .../java/org/apache/couchdb/nouveau/NouveauApplication.java   |  9 +++++++++
 .../couchdb/nouveau/NouveauApplicationConfiguration.java      | 11 +++++++++++
 .../java/org/apache/couchdb/nouveau/core/IndexManager.java    |  8 +++++++-
 .../apache/couchdb/nouveau/health/IndexHealthCheckTest.java   |  2 ++
 4 files changed, 29 insertions(+), 1 deletion(-)

diff --git 
a/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java 
b/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java
index a7cfdeed6..89b2b8596 100644
--- a/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java
+++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java
@@ -13,10 +13,12 @@
 
 package org.apache.couchdb.nouveau;
 
+import com.github.benmanes.caffeine.cache.Scheduler;
 import io.dropwizard.core.Application;
 import io.dropwizard.core.setup.Environment;
 import io.swagger.v3.jaxrs2.integration.resources.OpenApiResource;
 import java.util.concurrent.ForkJoinPool;
+import java.util.concurrent.ScheduledExecutorService;
 import org.apache.couchdb.nouveau.core.IndexManager;
 import org.apache.couchdb.nouveau.health.AnalyzeHealthCheck;
 import org.apache.couchdb.nouveau.health.IndexHealthCheck;
@@ -39,12 +41,19 @@ public class NouveauApplication extends 
Application<NouveauApplicationConfigurat
 
     @Override
     public void run(NouveauApplicationConfiguration configuration, Environment 
environment) throws Exception {
+
         // configure index manager
         final IndexManager indexManager = new IndexManager();
         
indexManager.setCommitIntervalSeconds(configuration.getCommitIntervalSeconds());
         indexManager.setIdleSeconds(configuration.getIdleSeconds());
         indexManager.setMaxIndexesOpen(configuration.getMaxIndexesOpen());
         indexManager.setMetricRegistry(environment.metrics());
+        final ScheduledExecutorService schedulerExecutorService = environment
+                .lifecycle()
+                .scheduledExecutorService("index-manager-%d")
+                .threads(configuration.getSchedulerThreadCount())
+                .build();
+        
indexManager.setScheduler(Scheduler.forScheduledExecutorService(schedulerExecutorService));
         indexManager.setSearcherFactory(new 
ParallelSearcherFactory(ForkJoinPool.commonPool()));
         indexManager.setObjectMapper(environment.getObjectMapper());
         indexManager.setRootDir(configuration.getRootDir());
diff --git 
a/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java
 
b/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java
index 50d320132..dce6fe6da 100644
--- 
a/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java
+++ 
b/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java
@@ -33,6 +33,9 @@ public class NouveauApplicationConfiguration extends 
Configuration {
     @NotNull
     private Path rootDir = null;
 
+    @Min(2)
+    private int schedulerThreadCount = 5;
+
     @JsonProperty
     public void setMaxIndexesOpen(int maxIndexesOpen) {
         this.maxIndexesOpen = maxIndexesOpen;
@@ -68,4 +71,12 @@ public class NouveauApplicationConfiguration extends 
Configuration {
     public Path getRootDir() {
         return rootDir;
     }
+
+    public int getSchedulerThreadCount() {
+        return schedulerThreadCount;
+    }
+
+    public void setSchedulerThreadCount(int schedulerThreadCount) {
+        this.schedulerThreadCount = schedulerThreadCount;
+    }
 }
diff --git 
a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java 
b/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java
index c82caf28e..907a52a4c 100644
--- a/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java
+++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/core/IndexManager.java
@@ -80,6 +80,8 @@ public final class IndexManager implements Managed {
 
     private MetricRegistry metricRegistry;
 
+    private Scheduler scheduler;
+
     private SearcherFactory searcherFactory;
 
     private AsyncLoadingCache<String, Index> cache;
@@ -212,6 +214,10 @@ public final class IndexManager implements Managed {
         this.metricRegistry = metricRegistry;
     }
 
+    public void setScheduler(final Scheduler scheduler) {
+        this.scheduler = scheduler;
+    }
+
     public void setSearcherFactory(final SearcherFactory searcherFactory) {
         this.searcherFactory = searcherFactory;
     }
@@ -225,7 +231,7 @@ public final class IndexManager implements Managed {
                 .weigher(new IndexWeigher())
                 .expireAfterAccess(Duration.ofSeconds(idleSeconds))
                 .refreshAfterWrite(Duration.ofSeconds(commitIntervalSeconds))
-                .scheduler(Scheduler.systemScheduler())
+                .scheduler(scheduler)
                 .evictionListener(new IndexEvictionListener())
                 .buildAsync(new AsyncIndexLoader());
         lock = new StripedLock<String>(100);
diff --git 
a/nouveau/src/test/java/org/apache/couchdb/nouveau/health/IndexHealthCheckTest.java
 
b/nouveau/src/test/java/org/apache/couchdb/nouveau/health/IndexHealthCheckTest.java
index 4bae7a7ad..7ee322313 100644
--- 
a/nouveau/src/test/java/org/apache/couchdb/nouveau/health/IndexHealthCheckTest.java
+++ 
b/nouveau/src/test/java/org/apache/couchdb/nouveau/health/IndexHealthCheckTest.java
@@ -17,6 +17,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import com.codahale.metrics.MetricRegistry;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.benmanes.caffeine.cache.Scheduler;
 import java.nio.file.Path;
 import org.apache.couchdb.nouveau.core.IndexManager;
 import org.apache.couchdb.nouveau.resources.IndexResource;
@@ -33,6 +34,7 @@ public class IndexHealthCheckTest {
         manager.setObjectMapper(new ObjectMapper());
         manager.setMetricRegistry(new MetricRegistry());
         manager.setRootDir(tempDir);
+        manager.setScheduler(Scheduler.systemScheduler());
         manager.setSearcherFactory(new SearcherFactory());
         manager.start();
 

Reply via email to