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); }
