This is an automated email from the ASF dual-hosted git repository. rnewson pushed a commit to branch lucene-10-weird in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 3eb860de0b9427cefe414eabd7a71988f4d846cf Author: Robert Newson <rnew...@apache.org> AuthorDate: Tue Aug 12 21:29:42 2025 +0100 maybe crap --- .../apache/couchdb/nouveau/NouveauApplication.java | 5 ++ .../couchdb/nouveau/resources/UpgradeResource.java | 74 ++++++++++++++++++++++ src/nouveau/include/nouveau.hrl | 3 +- src/nouveau/src/nouveau_api.erl | 36 +++++------ src/nouveau/src/nouveau_index_updater.erl | 1 + 5 files changed, 97 insertions(+), 22 deletions(-) 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 a6c202903..594339839 100644 --- a/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java +++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/NouveauApplication.java @@ -28,6 +28,7 @@ import org.apache.couchdb.nouveau.lucene.LuceneModule; import org.apache.couchdb.nouveau.lucene.ParallelSearcherFactory; import org.apache.couchdb.nouveau.resources.AnalyzeResource; import org.apache.couchdb.nouveau.resources.IndexResource; +import org.apache.couchdb.nouveau.resources.UpgradeResource; import org.apache.couchdb.nouveau.tasks.CloseAllIndexesTask; public class NouveauApplication extends Application<NouveauApplicationConfiguration> { @@ -75,6 +76,10 @@ public class NouveauApplication extends Application<NouveauApplicationConfigurat final IndexResource indexResource = new IndexResource(indexManager); environment.jersey().register(indexResource); + // UpgradeResource + final UpgradeResource upgradeResource = new UpgradeResource(); + environment.jersey().register(upgradeResource); + // Health checks environment.healthChecks().register("analyze", new AnalyzeHealthCheck(analyzeResource)); environment.healthChecks().register("index", new IndexHealthCheck(indexResource)); diff --git a/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/UpgradeResource.java b/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/UpgradeResource.java new file mode 100644 index 000000000..7b80a1be4 --- /dev/null +++ b/nouveau/src/main/java/org/apache/couchdb/nouveau/resources/UpgradeResource.java @@ -0,0 +1,74 @@ +// +// 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.resources; + +import com.codahale.metrics.annotation.ExceptionMetered; +import com.codahale.metrics.annotation.Metered; +import com.codahale.metrics.annotation.ResponseMetered; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +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.IndexInfoRequest; +import org.apache.couchdb.nouveau.api.Ok; + +@Path("/upgrade/{name}") +@Metered +@ResponseMetered +@ExceptionMetered(cause = IOException.class) +@Consumes(MediaType.APPLICATION_JSON) +@Produces(MediaType.APPLICATION_JSON) +public class UpgradeResource { + + @GET + public IndexInfo getIndexInfo(@PathParam("name") String name) throws Exception { + return new IndexInfo(0, 0, 0, 0, true); + } + + @POST + public Ok setIndexInfo(@PathParam("name") String name, @NotNull @Valid IndexInfoRequest request) throws Exception { + return Ok.INSTANCE; + } + + @DELETE + @Path("/doc/{docId}") + public Ok deleteDoc( + @PathParam("name") String name, + @PathParam("docId") String docId, + @NotNull @Valid DocumentDeleteRequest request) + throws Exception { + return Ok.INSTANCE; + } + + @PUT + @Path("/doc/{docId}") + public Ok updateDoc( + @PathParam("name") String name, + @PathParam("docId") String docId, + @NotNull @Valid DocumentUpdateRequest request) + throws Exception { + return Ok.INSTANCE; + } +} diff --git a/src/nouveau/include/nouveau.hrl b/src/nouveau/include/nouveau.hrl index e50cd45d3..b647b1830 100644 --- a/src/nouveau/include/nouveau.hrl +++ b/src/nouveau/include/nouveau.hrl @@ -19,5 +19,6 @@ def, def_lang, name, - sig=nil + sig = nil, + upgrade = false :: boolean() }). diff --git a/src/nouveau/src/nouveau_api.erl b/src/nouveau/src/nouveau_api.erl index 026212c5c..0204e7daf 100644 --- a/src/nouveau/src/nouveau_api.erl +++ b/src/nouveau/src/nouveau_api.erl @@ -217,31 +217,25 @@ set_seq(#index{} = Index, ReqBody) -> %% private functions index_path(Path) when is_binary(Path) -> - io_lib:format( - "/index/~s", - [ - couch_util:url_encode(Path) - ] - ); + [<<"/index/">>, couch_util:url_encode(Path)]; index_path(#index{} = Index) -> - io_lib:format( - "/index/~s", - [ - couch_util:url_encode(nouveau_util:index_name(Index)) - ] - ). + [resource(Index), couch_util:url_encode(nouveau_util:index_name(Index))]. doc_path(#index{} = Index, DocId) -> - io_lib:format( - "/index/~s/doc/~s", - [ - couch_util:url_encode(nouveau_util:index_name(Index)), - couch_util:url_encode(DocId) - ] - ). + [ + resource(Index), + couch_util:url_encode(nouveau_util:index_name(Index)), + <<"/doc/">>, + couch_util:url_encode(DocId) + ]. -search_path(IndexName) -> - index_path(IndexName) ++ "/search". +search_path(#index{} = Index) -> + [index_path(Index), <<"/search">>]. + +resource(#index{upgrade = false}) -> + <<"/index/">>; +resource(#index{upgrade = true}) -> + <<"/upgrade/">>. jaxrs_error(400, Body) -> {bad_request, message(Body)}; diff --git a/src/nouveau/src/nouveau_index_updater.erl b/src/nouveau/src/nouveau_index_updater.erl index 3952a893f..e76f84e73 100644 --- a/src/nouveau/src/nouveau_index_updater.erl +++ b/src/nouveau/src/nouveau_index_updater.erl @@ -65,6 +65,7 @@ update(#index{} = Index) -> TotalChanges = ChangesSince + PurgesSince, couch_task_status:add_task([ {type, search_indexer}, + {upgrade, Index#index.upgrade}, {database, Index#index.dbname}, {design_document, Index#index.ddoc_id}, {index, Index#index.name},