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

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

commit a9065b370e109ed87d50521e0752dbc735285867
Author: Robert Newson <[email protected]>
AuthorDate: Sat Mar 21 10:04:13 2026 +0000

    convert IndexInfo{Request,Response} to record
---
 .../org/apache/couchdb/nouveau/api/IndexInfo.java  | 68 ----------------------
 .../couchdb/nouveau/api/IndexInfoRequest.java      | 54 +++--------------
 .../couchdb/nouveau/api/IndexInfoResponse.java     | 25 ++++++++
 .../org/apache/couchdb/nouveau/core/Index.java     |  6 +-
 .../couchdb/nouveau/resources/IndexResource.java   | 16 +++--
 .../couchdb/nouveau/lucene/LuceneIndexTest.java    | 32 +++++-----
 6 files changed, 60 insertions(+), 141 deletions(-)

diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfo.java 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfo.java
deleted file mode 100644
index 9958c7780..000000000
--- a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfo.java
+++ /dev/null
@@ -1,68 +0,0 @@
-//
-// 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.api;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.PropertyNamingStrategies;
-import com.fasterxml.jackson.databind.annotation.JsonNaming;
-import jakarta.validation.constraints.PositiveOrZero;
-
-@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
-public final class IndexInfo {
-
-    @PositiveOrZero
-    private final long updateSeq;
-
-    @PositiveOrZero
-    private final long purgeSeq;
-
-    @PositiveOrZero
-    private final int numDocs;
-
-    @PositiveOrZero
-    private final long diskSize;
-
-    public IndexInfo(
-            @JsonProperty("update_seq") final long updateSeq,
-            @JsonProperty("purge_seq") final long purgeSeq,
-            @JsonProperty("num_docs") final int numDocs,
-            @JsonProperty("disk_size") final long diskSize) {
-        this.updateSeq = updateSeq;
-        this.purgeSeq = purgeSeq;
-        this.numDocs = numDocs;
-        this.diskSize = diskSize;
-    }
-
-    public int getNumDocs() {
-        return numDocs;
-    }
-
-    public long getDiskSize() {
-        return diskSize;
-    }
-
-    public long getUpdateSeq() {
-        return updateSeq;
-    }
-
-    public long getPurgeSeq() {
-        return purgeSeq;
-    }
-
-    @Override
-    public String toString() {
-        return "IndexInfo [updateSeq=" + updateSeq + ", purgeSeq=" + purgeSeq 
+ ", numDocs=" + numDocs + ", diskSize="
-                + diskSize + "]";
-    }
-}
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfoRequest.java
 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfoRequest.java
index cc008231c..bc2f016f8 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfoRequest.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfoRequest.java
@@ -13,50 +13,14 @@
 
 package org.apache.couchdb.nouveau.api;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-import jakarta.validation.constraints.Positive;
+import com.fasterxml.jackson.databind.PropertyNamingStrategies;
+import com.fasterxml.jackson.databind.annotation.JsonNaming;
+import jakarta.validation.constraints.PositiveOrZero;
 import java.util.OptionalLong;
 
-public final class IndexInfoRequest {
-
-    private final OptionalLong matchUpdateSeq;
-
-    private final OptionalLong updateSeq;
-
-    private final OptionalLong matchPurgeSeq;
-
-    private final OptionalLong purgeSeq;
-
-    public IndexInfoRequest(
-            @JsonProperty("match_update_seq") @Positive final OptionalLong 
matchUpdateSeq,
-            @JsonProperty("update_seq") @Positive final OptionalLong updateSeq,
-            @JsonProperty("match_purge_seq") @Positive final OptionalLong 
matchPurgeSeq,
-            @JsonProperty("purge_seq") @Positive final OptionalLong purgeSeq) {
-        this.matchUpdateSeq = matchUpdateSeq;
-        this.updateSeq = updateSeq;
-        this.matchPurgeSeq = matchPurgeSeq;
-        this.purgeSeq = purgeSeq;
-    }
-
-    public OptionalLong getMatchUpdateSeq() {
-        return matchUpdateSeq;
-    }
-
-    public OptionalLong getUpdateSeq() {
-        return updateSeq;
-    }
-
-    public OptionalLong getMatchPurgeSeq() {
-        return matchPurgeSeq;
-    }
-
-    public OptionalLong getPurgeSeq() {
-        return purgeSeq;
-    }
-
-    @Override
-    public String toString() {
-        return "IndexInfoRequest [matchUpdateSeq=" + matchUpdateSeq + ", 
updateSeq=" + updateSeq + ", matchPurgeSeq="
-                + matchPurgeSeq + ", purgeSeq=" + purgeSeq + "]";
-    }
-}
+@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
+public record IndexInfoRequest(
+        @PositiveOrZero OptionalLong matchUpdateSeq,
+        @PositiveOrZero OptionalLong updateSeq,
+        @PositiveOrZero OptionalLong matchPurgeSeq,
+        @PositiveOrZero OptionalLong purgeSeq) {}
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfoResponse.java
 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfoResponse.java
new file mode 100644
index 000000000..26543c677
--- /dev/null
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/api/IndexInfoResponse.java
@@ -0,0 +1,25 @@
+//
+// 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.api;
+
+import com.fasterxml.jackson.databind.PropertyNamingStrategies;
+import com.fasterxml.jackson.databind.annotation.JsonNaming;
+import jakarta.validation.constraints.PositiveOrZero;
+
+@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
+public record IndexInfoResponse(
+        @PositiveOrZero long updateSeq,
+        @PositiveOrZero long purgeSeq,
+        @PositiveOrZero long numDocs,
+        @PositiveOrZero long diskSize) {}
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java
index 35013bf8d..528a885b6 100644
--- a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java
+++ b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/core/Index.java
@@ -19,7 +19,7 @@ import java.io.Closeable;
 import java.io.IOException;
 import org.apache.couchdb.nouveau.api.DocumentDeleteRequest;
 import org.apache.couchdb.nouveau.api.DocumentUpdateRequest;
-import org.apache.couchdb.nouveau.api.IndexInfo;
+import org.apache.couchdb.nouveau.api.IndexInfoResponse;
 import org.apache.couchdb.nouveau.api.SearchRequest;
 import org.apache.couchdb.nouveau.api.SearchResults;
 
@@ -44,10 +44,10 @@ public abstract class Index implements Closeable {
         this.purgeSeq = purgeSeq;
     }
 
-    public final IndexInfo info() throws IOException {
+    public final IndexInfoResponse info() throws IOException {
         final int numDocs = doNumDocs();
         final long diskSize = doDiskSize();
-        return new IndexInfo(updateSeq, purgeSeq, numDocs, diskSize);
+        return new IndexInfoResponse(updateSeq, purgeSeq, numDocs, diskSize);
     }
 
     protected abstract int doNumDocs() throws IOException;
diff --git 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java
 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java
index ef78ab20e..ecddb6a34 100644
--- 
a/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java
+++ 
b/extra/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/IndexResource.java
@@ -36,8 +36,8 @@ import org.apache.couchdb.nouveau.api.BulkUpdateRequest;
 import org.apache.couchdb.nouveau.api.DocumentDeleteRequest;
 import org.apache.couchdb.nouveau.api.DocumentUpdateRequest;
 import org.apache.couchdb.nouveau.api.IndexDefinition;
-import org.apache.couchdb.nouveau.api.IndexInfo;
 import org.apache.couchdb.nouveau.api.IndexInfoRequest;
+import org.apache.couchdb.nouveau.api.IndexInfoResponse;
 import org.apache.couchdb.nouveau.api.Ok;
 import org.apache.couchdb.nouveau.api.SearchRequest;
 import org.apache.couchdb.nouveau.api.SearchResults;
@@ -89,7 +89,7 @@ public final class IndexResource {
     }
 
     @GET
-    public IndexInfo getIndexInfo(@PathParam("name") String name) throws 
Exception {
+    public IndexInfoResponse getIndexInfo(@PathParam("name") String name) 
throws Exception {
         return indexManager.with(name, (index) -> {
             return index.info();
         });
@@ -98,16 +98,14 @@ public final class IndexResource {
     @POST
     public Ok setIndexInfo(@PathParam("name") String name, @NotNull @Valid 
IndexInfoRequest request) throws Exception {
         return indexManager.with(name, (index) -> {
-            if (request.getMatchUpdateSeq().isPresent()
-                    && request.getUpdateSeq().isPresent()) {
+            if (request.matchUpdateSeq().isPresent() && 
request.updateSeq().isPresent()) {
                 index.setUpdateSeq(
-                        request.getMatchUpdateSeq().getAsLong(),
-                        request.getUpdateSeq().getAsLong());
+                        request.matchUpdateSeq().getAsLong(),
+                        request.updateSeq().getAsLong());
             }
-            if (request.getMatchPurgeSeq().isPresent() && 
request.getPurgeSeq().isPresent()) {
+            if (request.matchPurgeSeq().isPresent() && 
request.purgeSeq().isPresent()) {
                 index.setPurgeSeq(
-                        request.getMatchPurgeSeq().getAsLong(),
-                        request.getPurgeSeq().getAsLong());
+                        request.matchPurgeSeq().getAsLong(), 
request.purgeSeq().getAsLong());
             }
             return Ok.INSTANCE;
         });
diff --git 
a/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene/LuceneIndexTest.java
 
b/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene/LuceneIndexTest.java
index f87af2fe0..abc0af1cf 100644
--- 
a/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene/LuceneIndexTest.java
+++ 
b/extra/nouveau/src/test/java/org/apache/couchdb/nouveau/lucene/LuceneIndexTest.java
@@ -28,7 +28,7 @@ import org.apache.couchdb.nouveau.api.DoubleField;
 import org.apache.couchdb.nouveau.api.DoubleRange;
 import org.apache.couchdb.nouveau.api.Field;
 import org.apache.couchdb.nouveau.api.IndexDefinition;
-import org.apache.couchdb.nouveau.api.IndexInfo;
+import org.apache.couchdb.nouveau.api.IndexInfoResponse;
 import org.apache.couchdb.nouveau.api.SearchRequest;
 import org.apache.couchdb.nouveau.api.SearchResults;
 import org.apache.couchdb.nouveau.api.StringField;
@@ -229,19 +229,19 @@ public class LuceneIndexTest {
     public void testInfo(@TempDir Path path) throws IOException {
         Index index = setup(path);
         try {
-            IndexInfo info = index.info();
-            assertThat(info.getDiskSize()).isEqualTo(0);
-            assertThat(info.getNumDocs()).isEqualTo(0);
-            assertThat(info.getUpdateSeq()).isEqualTo(0);
+            IndexInfoResponse info = index.info();
+            assertThat(info.diskSize()).isEqualTo(0);
+            assertThat(info.numDocs()).isEqualTo(0);
+            assertThat(info.updateSeq()).isEqualTo(0);
 
             final Collection<Field> fields = List.of(new DoubleField("bar", 
12.0, false));
             index.update("foo", new DocumentUpdateRequest(0, 2, null, fields));
             index.commit();
 
             info = index.info();
-            assertThat(info.getDiskSize()).isGreaterThan(0);
-            assertThat(info.getNumDocs()).isEqualTo(1);
-            assertThat(info.getUpdateSeq()).isEqualTo(2);
+            assertThat(info.diskSize()).isGreaterThan(0);
+            assertThat(info.numDocs()).isEqualTo(1);
+            assertThat(info.updateSeq()).isEqualTo(2);
         } finally {
             cleanup(index);
         }
@@ -255,15 +255,15 @@ public class LuceneIndexTest {
             index.update("foo", new DocumentUpdateRequest(0, 2, null, fields));
             index.commit();
 
-            IndexInfo info = index.info();
-            assertThat(info.getNumDocs()).isEqualTo(1);
+            IndexInfoResponse info = index.info();
+            assertThat(info.numDocs()).isEqualTo(1);
 
             index.delete("foo", new DocumentDeleteRequest(2, 3, false));
             index.commit();
 
             info = index.info();
-            assertThat(info.getNumDocs()).isEqualTo(0);
-            assertThat(info.getUpdateSeq()).isEqualTo(3);
+            assertThat(info.numDocs()).isEqualTo(0);
+            assertThat(info.updateSeq()).isEqualTo(3);
         } finally {
             cleanup(index);
         }
@@ -277,15 +277,15 @@ public class LuceneIndexTest {
             index.update("foo", new DocumentUpdateRequest(0, 2, null, fields));
             index.commit();
 
-            IndexInfo info = index.info();
-            assertThat(info.getNumDocs()).isEqualTo(1);
+            IndexInfoResponse info = index.info();
+            assertThat(info.numDocs()).isEqualTo(1);
 
             index.delete("foo", new DocumentDeleteRequest(0, 3, true));
             index.commit();
 
             info = index.info();
-            assertThat(info.getNumDocs()).isEqualTo(0);
-            assertThat(info.getPurgeSeq()).isEqualTo(3);
+            assertThat(info.numDocs()).isEqualTo(0);
+            assertThat(info.purgeSeq()).isEqualTo(3);
         } finally {
             cleanup(index);
         }

Reply via email to