You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2023/03/13 14:44:15 UTC

[couchdb] 01/02: move application config to base project to tighten type safety

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

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

commit 48ac91e3f0c29c330d010e215b0e0eec6ef498b8
Author: Robert Newson <rn...@apache.org>
AuthorDate: Mon Mar 13 14:04:20 2023 +0000

    move application config to base project to tighten type safety
---
 .../org/apache/couchdb/nouveau/LuceneBundle.java   |  2 +-
 .../nouveau/NouveauApplicationConfiguration.java   | 86 ++++++++++++++++++++++
 .../couchdb/nouveau/lucene4/Lucene4Bundle.java     |  6 +-
 .../org.apache.couchdb.nouveau.LuceneBundle        | 16 ++++
 .../couchdb/nouveau/lucene9/Lucene9Bundle.java     |  6 +-
 .../org.apache.couchdb.nouveau.LuceneBundle        | 16 ++++
 .../apache/couchdb/nouveau/NouveauApplication.java | 11 +--
 7 files changed, 129 insertions(+), 14 deletions(-)

diff --git a/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/LuceneBundle.java b/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/LuceneBundle.java
index d309b0312..5eecd5973 100644
--- a/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/LuceneBundle.java
+++ b/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/LuceneBundle.java
@@ -17,7 +17,7 @@ import org.apache.couchdb.nouveau.core.IndexManager;
 
 import io.dropwizard.ConfiguredBundle;
 
-public class LuceneBundle<T> implements ConfiguredBundle<T> {
+public class LuceneBundle implements ConfiguredBundle<NouveauApplicationConfiguration> {
 
     protected IndexManager indexManager;
 
diff --git a/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java b/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java
new file mode 100644
index 000000000..6d90086ac
--- /dev/null
+++ b/java/nouveau/base/src/main/java/org/apache/couchdb/nouveau/NouveauApplicationConfiguration.java
@@ -0,0 +1,86 @@
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.couchdb.nouveau;
+
+import java.nio.file.Path;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import io.dropwizard.Configuration;
+
+public class NouveauApplicationConfiguration extends Configuration {
+
+    @Min(10)
+    private int maxIndexesOpen = 10;
+
+    @Min(10)
+    private int commitIntervalSeconds = 10;
+
+    @Min(30)
+    private int idleSeconds = 30;
+
+    @Min(-1)
+    private int lockCount = -1;
+
+    @NotNull
+    private Path rootDir = null;
+
+    @JsonProperty
+    public void setMaxIndexesOpen(int maxIndexesOpen) {
+        this.maxIndexesOpen = maxIndexesOpen;
+    }
+
+    public int getMaxIndexesOpen() {
+        return maxIndexesOpen;
+    }
+
+    @JsonProperty
+    public void setCommitIntervalSeconds(int commitIntervalSeconds) {
+        this.commitIntervalSeconds = commitIntervalSeconds;
+    }
+
+    public int getCommitIntervalSeconds() {
+        return commitIntervalSeconds;
+    }
+
+    @JsonProperty
+    public void setIdleSeconds(int idleSeconds) {
+        this.idleSeconds = idleSeconds;
+    }
+
+    public int getIdleSeconds() {
+        return idleSeconds;
+    }
+
+    public int getLockCount() {
+        return lockCount;
+    }
+
+    public void setLockCount(int lockCount) {
+        this.lockCount = lockCount;
+    }
+
+    @JsonProperty
+    public void setRootDir(Path rootDir) {
+        this.rootDir = rootDir;
+    }
+
+    public Path getRootDir() {
+        return rootDir;
+    }
+
+}
diff --git a/java/nouveau/lucene4/src/main/java/org/apache/couchdb/nouveau/lucene4/Lucene4Bundle.java b/java/nouveau/lucene4/src/main/java/org/apache/couchdb/nouveau/lucene4/Lucene4Bundle.java
index 93a0a564c..228f12d26 100644
--- a/java/nouveau/lucene4/src/main/java/org/apache/couchdb/nouveau/lucene4/Lucene4Bundle.java
+++ b/java/nouveau/lucene4/src/main/java/org/apache/couchdb/nouveau/lucene4/Lucene4Bundle.java
@@ -16,19 +16,19 @@ package org.apache.couchdb.nouveau.lucene4;
 import java.util.concurrent.ExecutorService;
 
 import org.apache.couchdb.nouveau.LuceneBundle;
+import org.apache.couchdb.nouveau.NouveauApplicationConfiguration;
 import org.apache.couchdb.nouveau.lucene4.core.Lucene4Module;
 import org.apache.couchdb.nouveau.lucene4.core.ParallelSearcherFactory;
 import org.apache.couchdb.nouveau.lucene4.resources.AnalyzeResource;
 import org.apache.couchdb.nouveau.lucene4.resources.IndexResource;
 import org.apache.lucene.search.SearcherFactory;
 
-import io.dropwizard.Configuration;
 import io.dropwizard.setup.Environment;
 
-public final class Lucene4Bundle extends LuceneBundle<Configuration> {
+public final class Lucene4Bundle extends LuceneBundle {
 
     @Override
-    public void run(final Configuration configuration, final Environment environment) throws Exception {
+    public void run(final NouveauApplicationConfiguration configuration, final Environment environment) throws Exception {
 
         // Serialization classes
         environment.getObjectMapper().registerModule(new Lucene4Module());
diff --git a/java/nouveau/lucene4/src/main/resources/META-INF/services/org.apache.couchdb.nouveau.LuceneBundle b/java/nouveau/lucene4/src/main/resources/META-INF/services/org.apache.couchdb.nouveau.LuceneBundle
new file mode 100644
index 000000000..8fe744dd9
--- /dev/null
+++ b/java/nouveau/lucene4/src/main/resources/META-INF/services/org.apache.couchdb.nouveau.LuceneBundle
@@ -0,0 +1,16 @@
+#  Licensed to the Apache Software Foundation (ASF) under one or more
+#  contributor license agreements.  See the NOTICE file distributed with
+#  this work for additional information regarding copyright ownership.
+#  The ASF licenses this file to You under the Apache License, Version 2.0
+#  (the "License"); you may not use this file except in compliance with
+#  the License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+org.apache.couchdb.nouveau.lucene4.Lucene4Bundle
diff --git a/java/nouveau/lucene9/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Bundle.java b/java/nouveau/lucene9/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Bundle.java
index 669f6ccbb..ee5c299e4 100644
--- a/java/nouveau/lucene9/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Bundle.java
+++ b/java/nouveau/lucene9/src/main/java/org/apache/couchdb/nouveau/lucene9/Lucene9Bundle.java
@@ -16,19 +16,19 @@ package org.apache.couchdb.nouveau.lucene9;
 import java.util.concurrent.ExecutorService;
 
 import org.apache.couchdb.nouveau.LuceneBundle;
+import org.apache.couchdb.nouveau.NouveauApplicationConfiguration;
 import org.apache.couchdb.nouveau.lucene9.core.Lucene9Module;
 import org.apache.couchdb.nouveau.lucene9.core.ParallelSearcherFactory;
 import org.apache.couchdb.nouveau.lucene9.resources.AnalyzeResource;
 import org.apache.couchdb.nouveau.lucene9.resources.IndexResource;
 import org.apache.lucene.search.SearcherFactory;
 
-import io.dropwizard.Configuration;
 import io.dropwizard.setup.Environment;
 
-public final class Lucene9Bundle extends LuceneBundle<Configuration> {
+public final class Lucene9Bundle extends LuceneBundle {
 
     @Override
-    public void run(final Configuration configuration, final Environment environment) throws Exception {
+    public void run(final NouveauApplicationConfiguration configuration, final Environment environment) throws Exception {
 
         // Serialization classes
         environment.getObjectMapper().registerModule(new Lucene9Module());
diff --git a/java/nouveau/lucene9/src/main/resources/META-INF/services/org.apache.couchdb.nouveau.LuceneBundle b/java/nouveau/lucene9/src/main/resources/META-INF/services/org.apache.couchdb.nouveau.LuceneBundle
new file mode 100644
index 000000000..64ad96f64
--- /dev/null
+++ b/java/nouveau/lucene9/src/main/resources/META-INF/services/org.apache.couchdb.nouveau.LuceneBundle
@@ -0,0 +1,16 @@
+#  Licensed to the Apache Software Foundation (ASF) under one or more
+#  contributor license agreements.  See the NOTICE file distributed with
+#  this work for additional information regarding copyright ownership.
+#  The ASF licenses this file to You under the Apache License, Version 2.0
+#  (the "License"); you may not use this file except in compliance with
+#  the License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+org.apache.couchdb.nouveau.lucene9.Lucene9Bundle
diff --git a/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java b/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java
index 7c5de8fbc..eba48ccd6 100644
--- a/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java
+++ b/java/nouveau/server/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java
@@ -22,7 +22,6 @@ import org.apache.couchdb.nouveau.core.IndexManager;
 import org.apache.couchdb.nouveau.core.UpdatesOutOfOrderExceptionMapper;
 
 import io.dropwizard.Application;
-import io.dropwizard.ConfiguredBundle;
 import io.dropwizard.setup.Bootstrap;
 import io.dropwizard.setup.Environment;
 
@@ -49,13 +48,11 @@ public class NouveauApplication extends Application<NouveauApplicationConfigurat
                 try {
                     ClassLoader classLoader = URLClassLoader
                             .newInstance(new URL[] { new URL(System.getProperty(name)) });
-                    final ServiceLoader<ConfiguredBundle> bundleLoader = ServiceLoader.load(ConfiguredBundle.class,
+                    final ServiceLoader<LuceneBundle> bundleLoader = ServiceLoader.load(LuceneBundle.class,
                             classLoader);
-                    for (final ConfiguredBundle<NouveauApplicationConfiguration> bundle : bundleLoader) {
-                        if (bundle instanceof LuceneBundle) {
-                            ((LuceneBundle)bundle).setIndexManager(indexManager);
-                            bootstrap.addBundle(bundle);
-                        }
+                    for (final LuceneBundle bundle : bundleLoader) {
+                        bundle.setIndexManager(indexManager);
+                        bootstrap.addBundle(bundle);
                     }
                 } catch (final MalformedURLException e) {
                     throw new Error(e);