From 4d633394b53f56ef2b9bebc75a84c88680559e7e Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Mon, 25 Aug 2025 20:38:01 +0200 Subject: [PATCH 1/3] feat: support aliases --- .../java/io/weaviate/containers/Weaviate.java | 2 +- .../io/weaviate/integration/AliasITest.java | 59 +++++++++++++++++++ .../client6/v1/api/WeaviateClient.java | 3 + .../weaviate/client6/v1/api/alias/Alias.java | 6 ++ .../v1/api/alias/CreateAliasRequest.java | 15 +++++ .../v1/api/alias/DeleteAliasRequest.java | 13 ++++ .../client6/v1/api/alias/GetAliasRequest.java | 17 ++++++ .../v1/api/alias/ListAliasRequest.java | 47 +++++++++++++++ .../v1/api/alias/ListAliasResponse.java | 8 +++ .../v1/api/alias/UpdateAliasRequest.java | 26 ++++++++ .../v1/api/alias/WeaviateAliasClient.java | 50 ++++++++++++++++ 11 files changed, 245 insertions(+), 1 deletion(-) create mode 100644 src/it/java/io/weaviate/integration/AliasITest.java create mode 100644 src/main/java/io/weaviate/client6/v1/api/alias/Alias.java create mode 100644 src/main/java/io/weaviate/client6/v1/api/alias/CreateAliasRequest.java create mode 100644 src/main/java/io/weaviate/client6/v1/api/alias/DeleteAliasRequest.java create mode 100644 src/main/java/io/weaviate/client6/v1/api/alias/GetAliasRequest.java create mode 100644 src/main/java/io/weaviate/client6/v1/api/alias/ListAliasRequest.java create mode 100644 src/main/java/io/weaviate/client6/v1/api/alias/ListAliasResponse.java create mode 100644 src/main/java/io/weaviate/client6/v1/api/alias/UpdateAliasRequest.java create mode 100644 src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClient.java diff --git a/src/it/java/io/weaviate/containers/Weaviate.java b/src/it/java/io/weaviate/containers/Weaviate.java index 745e0c626..301831751 100644 --- a/src/it/java/io/weaviate/containers/Weaviate.java +++ b/src/it/java/io/weaviate/containers/Weaviate.java @@ -14,7 +14,7 @@ public class Weaviate extends WeaviateContainer { private WeaviateClient clientInstance; - public static final String VERSION = "1.29.1"; + public static final String VERSION = "1.32.2"; public static final String DOCKER_IMAGE = "semitechnologies/weaviate"; /** diff --git a/src/it/java/io/weaviate/integration/AliasITest.java b/src/it/java/io/weaviate/integration/AliasITest.java new file mode 100644 index 000000000..f5b1dd47b --- /dev/null +++ b/src/it/java/io/weaviate/integration/AliasITest.java @@ -0,0 +1,59 @@ +package io.weaviate.integration; + +import java.io.IOException; +import java.util.List; + +import org.assertj.core.api.Assertions; +import org.junit.Test; + +import io.weaviate.ConcurrentTest; +import io.weaviate.client6.v1.api.WeaviateClient; +import io.weaviate.client6.v1.api.alias.Alias; +import io.weaviate.containers.Container; + +public class AliasITest extends ConcurrentTest { + private static WeaviateClient client = Container.WEAVIATE.getClient(); + + @Test + public void test_aliasLifecycle() throws IOException { + // Arrange + var nsPaulHewson = ns("PaulHewson"); + var nsGeorgeBarnes = ns("GeorgeBarnes"); + var nsColsonBaker = ns("ColsonBaker"); + + for (var collection : List.of(nsPaulHewson, nsGeorgeBarnes, nsColsonBaker)) { + client.collections.create(collection); + } + + // Act: create aliases + client.alias.create(nsPaulHewson, "Bono"); + client.alias.create(nsGeorgeBarnes, "MachineGunKelly"); + + // Assert: list all + var aliases = client.alias.list(); + Assertions.assertThat(aliases).hasSize(2); + Assertions.assertThat(aliases) + .as("created Bono and MachineGunKelly aliases") + .contains( + new Alias(nsPaulHewson, "Bono"), + new Alias(nsGeorgeBarnes, "MachineGunKelly")); + + // Act: update aliases + client.alias.update("MachineGunKelly", nsColsonBaker); + + // Assert: check MGK points to another collection + var mgk = client.alias.get("MachineGunKelly"); + Assertions.assertThat(mgk).get() + .as("updated MachineGunKelly alias") + .returns(nsColsonBaker, Alias::collection); + + // Act: delete Bono alias + client.alias.delete("Bono"); + + // Assert + var paulHewsonAliases = client.alias.list(all -> all.collection(nsPaulHewson)); + Assertions.assertThat(paulHewsonAliases) + .as("no aliases once Bono is deleted") + .isEmpty(); + } +} diff --git a/src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java b/src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java index 1e2127e22..d791fb360 100644 --- a/src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java +++ b/src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.util.function.Function; +import io.weaviate.client6.v1.api.alias.WeaviateAliasClient; import io.weaviate.client6.v1.api.collections.WeaviateCollectionsClient; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.DefaultGrpcTransport; @@ -19,12 +20,14 @@ public class WeaviateClient implements Closeable { private final GrpcTransport grpcTransport; public final WeaviateCollectionsClient collections; + public final WeaviateAliasClient alias; public WeaviateClient(Config config) { this.config = config; this.restTransport = new DefaultRestTransport(config.restTransportOptions()); this.grpcTransport = new DefaultGrpcTransport(config.grpcTransportOptions()); + this.alias = new WeaviateAliasClient(restTransport); this.collections = new WeaviateCollectionsClient(restTransport, grpcTransport); } diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/Alias.java b/src/main/java/io/weaviate/client6/v1/api/alias/Alias.java new file mode 100644 index 000000000..c2693b55f --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/alias/Alias.java @@ -0,0 +1,6 @@ +package io.weaviate.client6.v1.api.alias; + +import com.google.gson.annotations.SerializedName; + +public record Alias(@SerializedName("class") String collection, @SerializedName("alias") String alias) { +} diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/CreateAliasRequest.java b/src/main/java/io/weaviate/client6/v1/api/alias/CreateAliasRequest.java new file mode 100644 index 000000000..9b9dff27a --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/alias/CreateAliasRequest.java @@ -0,0 +1,15 @@ +package io.weaviate.client6.v1.api.alias; + +import java.util.Collections; + +import io.weaviate.client6.v1.internal.json.JSON; +import io.weaviate.client6.v1.internal.rest.Endpoint; +import io.weaviate.client6.v1.internal.rest.SimpleEndpoint; + +public record CreateAliasRequest(Alias alias) { + public final static Endpoint _ENDPOINT = SimpleEndpoint.sideEffect( + __ -> "POST", + __ -> "/aliases/", + __ -> Collections.emptyMap(), + request -> JSON.serialize(request.alias)); +} diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/DeleteAliasRequest.java b/src/main/java/io/weaviate/client6/v1/api/alias/DeleteAliasRequest.java new file mode 100644 index 000000000..4b3ed2d37 --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/alias/DeleteAliasRequest.java @@ -0,0 +1,13 @@ +package io.weaviate.client6.v1.api.alias; + +import java.util.Collections; + +import io.weaviate.client6.v1.internal.rest.Endpoint; +import io.weaviate.client6.v1.internal.rest.SimpleEndpoint; + +public record DeleteAliasRequest(String alias) { + public final static Endpoint _ENDPOINT = SimpleEndpoint.sideEffect( + __ -> "DELETE", + request -> "/aliases/" + request.alias, + __ -> Collections.emptyMap()); +} diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/GetAliasRequest.java b/src/main/java/io/weaviate/client6/v1/api/alias/GetAliasRequest.java new file mode 100644 index 000000000..a3ad048b1 --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/alias/GetAliasRequest.java @@ -0,0 +1,17 @@ +package io.weaviate.client6.v1.api.alias; + +import java.util.Collections; +import java.util.Optional; + +import io.weaviate.client6.v1.internal.json.JSON; +import io.weaviate.client6.v1.internal.rest.Endpoint; +import io.weaviate.client6.v1.internal.rest.OptionalEndpoint; + +public record GetAliasRequest(String alias) { + public final static Endpoint> _ENDPOINT = OptionalEndpoint.noBodyOptional( + __ -> "GET", + request -> "/aliases/" + request.alias, + __ -> Collections.emptyMap(), + (statusCode, response) -> JSON.deserialize(response, Alias.class)); + +} diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/ListAliasRequest.java b/src/main/java/io/weaviate/client6/v1/api/alias/ListAliasRequest.java new file mode 100644 index 000000000..ce20e4a1e --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/alias/ListAliasRequest.java @@ -0,0 +1,47 @@ +package io.weaviate.client6.v1.api.alias; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +import io.weaviate.client6.v1.internal.ObjectBuilder; +import io.weaviate.client6.v1.internal.json.JSON; +import io.weaviate.client6.v1.internal.rest.Endpoint; +import io.weaviate.client6.v1.internal.rest.SimpleEndpoint; + +public record ListAliasRequest(String collection) { + public final static Endpoint> _ENDPOINT = SimpleEndpoint.noBody( + __ -> "GET", + __ -> "/aliases", + request -> request.collection != null + ? Map.of("class", request.collection) + : Collections.emptyMap(), + (statusCode, response) -> JSON.deserialize(response, ListAliasResponse.class).aliases()); + + public static ListAliasRequest of() { + return of(ObjectBuilder.identity()); + } + + public static ListAliasRequest of(Function> fn) { + return fn.apply(new Builder()).build(); + } + + public ListAliasRequest(Builder builder) { + this(builder.collection); + } + + public static class Builder implements ObjectBuilder { + private String collection; + + public Builder collection(String collection) { + this.collection = collection; + return this; + } + + @Override + public ListAliasRequest build() { + return new ListAliasRequest(this); + } + } +} diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/ListAliasResponse.java b/src/main/java/io/weaviate/client6/v1/api/alias/ListAliasResponse.java new file mode 100644 index 000000000..f03a4f627 --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/alias/ListAliasResponse.java @@ -0,0 +1,8 @@ +package io.weaviate.client6.v1.api.alias; + +import java.util.List; + +import com.google.gson.annotations.SerializedName; + +public record ListAliasResponse(@SerializedName("aliases") List aliases) { +} diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/UpdateAliasRequest.java b/src/main/java/io/weaviate/client6/v1/api/alias/UpdateAliasRequest.java new file mode 100644 index 000000000..060db8def --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/alias/UpdateAliasRequest.java @@ -0,0 +1,26 @@ +package io.weaviate.client6.v1.api.alias; + +import java.util.Collections; + +import com.google.gson.annotations.SerializedName; + +import io.weaviate.client6.v1.internal.json.JSON; +import io.weaviate.client6.v1.internal.rest.Endpoint; +import io.weaviate.client6.v1.internal.rest.SimpleEndpoint; + +public record UpdateAliasRequest(String alias, String newTargetCollection) { + public final static Endpoint _ENDPOINT = SimpleEndpoint.sideEffect( + __ -> "PUT", + request -> "/aliases/" + request.alias, + __ -> Collections.emptyMap(), + request -> JSON.serialize(request.toRequestBody())); + + private RequestBody toRequestBody() { + return new RequestBody(); + } + + private class RequestBody { + @SerializedName("class") + private final String collection = UpdateAliasRequest.this.newTargetCollection; + } +} diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClient.java b/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClient.java new file mode 100644 index 000000000..1f16c5f84 --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClient.java @@ -0,0 +1,50 @@ +package io.weaviate.client6.v1.api.alias; + +import java.io.IOException; +import java.util.List; +import java.util.Optional; +import java.util.function.Function; + +import io.weaviate.client6.v1.internal.ObjectBuilder; +import io.weaviate.client6.v1.internal.rest.RestTransport; + +public class WeaviateAliasClient { + private final RestTransport restTransport; + + public WeaviateAliasClient(RestTransport restTransport) { + this.restTransport = restTransport; + } + + public void create(String collection, String alias) throws IOException { + create(new Alias(collection, alias)); + } + + public void create(Alias alias) throws IOException { + this.restTransport.performRequest(new CreateAliasRequest(alias), CreateAliasRequest._ENDPOINT); + } + + public List list() throws IOException { + return list(ListAliasRequest.of()); + } + + public List list(Function> fn) throws IOException { + return list(ListAliasRequest.of(fn)); + } + + private List list(ListAliasRequest request) throws IOException { + return this.restTransport.performRequest(request, ListAliasRequest._ENDPOINT); + } + + public Optional get(String alias) throws IOException { + return this.restTransport.performRequest(new GetAliasRequest(alias), GetAliasRequest._ENDPOINT); + } + + public void update(String alias, String newTargetCollection) throws IOException { + this.restTransport.performRequest(new UpdateAliasRequest(alias, newTargetCollection), + UpdateAliasRequest._ENDPOINT); + } + + public void delete(String alias) throws IOException { + this.restTransport.performRequest(new DeleteAliasRequest(alias), DeleteAliasRequest._ENDPOINT); + } +} From d2d9b826d6373c5508f8de64ec593dfce9664117 Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Mon, 25 Aug 2025 20:41:11 +0200 Subject: [PATCH 2/3] feat: extend alias to async client --- .../client6/v1/api/WeaviateClientAsync.java | 3 ++ .../api/alias/WeaviateAliasClientAsync.java | 50 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClientAsync.java diff --git a/src/main/java/io/weaviate/client6/v1/api/WeaviateClientAsync.java b/src/main/java/io/weaviate/client6/v1/api/WeaviateClientAsync.java index 3f144c5e9..d26e86d8a 100644 --- a/src/main/java/io/weaviate/client6/v1/api/WeaviateClientAsync.java +++ b/src/main/java/io/weaviate/client6/v1/api/WeaviateClientAsync.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.util.function.Function; +import io.weaviate.client6.v1.api.alias.WeaviateAliasClientAsync; import io.weaviate.client6.v1.api.collections.WeaviateCollectionsClientAsync; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.DefaultGrpcTransport; @@ -16,11 +17,13 @@ public class WeaviateClientAsync implements Closeable { private final GrpcTransport grpcTransport; public final WeaviateCollectionsClientAsync collections; + public final WeaviateAliasClientAsync alias; public WeaviateClientAsync(Config config) { this.restTransport = new DefaultRestTransport(config.restTransportOptions()); this.grpcTransport = new DefaultGrpcTransport(config.grpcTransportOptions()); + this.alias = new WeaviateAliasClientAsync(restTransport); this.collections = new WeaviateCollectionsClientAsync(restTransport, grpcTransport); } diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClientAsync.java b/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClientAsync.java new file mode 100644 index 000000000..2bc9de02b --- /dev/null +++ b/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClientAsync.java @@ -0,0 +1,50 @@ +package io.weaviate.client6.v1.api.alias; + +import java.util.List; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; + +import io.weaviate.client6.v1.internal.ObjectBuilder; +import io.weaviate.client6.v1.internal.rest.RestTransport; + +public class WeaviateAliasClientAsync { + private final RestTransport restTransport; + + public WeaviateAliasClientAsync(RestTransport restTransport) { + this.restTransport = restTransport; + } + + public CompletableFuture create(String collection, String alias) { + return create(new Alias(collection, alias)); + } + + public CompletableFuture create(Alias alias) { + return this.restTransport.performRequestAsync(new CreateAliasRequest(alias), CreateAliasRequest._ENDPOINT); + } + + public CompletableFuture> list() { + return list(ListAliasRequest.of()); + } + + public CompletableFuture> list(Function> fn) { + return list(ListAliasRequest.of(fn)); + } + + private CompletableFuture> list(ListAliasRequest request) { + return this.restTransport.performRequestAsync(request, ListAliasRequest._ENDPOINT); + } + + public CompletableFuture> get(String alias) { + return this.restTransport.performRequestAsync(new GetAliasRequest(alias), GetAliasRequest._ENDPOINT); + } + + public CompletableFuture update(String alias, String newTargetCollection) { + return this.restTransport.performRequestAsync(new UpdateAliasRequest(alias, newTargetCollection), + UpdateAliasRequest._ENDPOINT); + } + + public CompletableFuture delete(String alias) { + return this.restTransport.performRequestAsync(new DeleteAliasRequest(alias), DeleteAliasRequest._ENDPOINT); + } +} From 472b56ea3045e16c8412a0b1f3b988b546c425c0 Mon Sep 17 00:00:00 2001 From: dyma solovei Date: Wed, 27 Aug 2025 11:32:22 +0200 Subject: [PATCH 3/3] chore: write javadoc --- .../client6/v1/api/WeaviateClient.java | 7 ++ .../client6/v1/api/WeaviateClientAsync.java | 8 ++ .../weaviate/client6/v1/api/alias/Alias.java | 6 +- .../v1/api/alias/ListAliasRequest.java | 3 + .../v1/api/alias/WeaviateAliasClient.java | 74 +++++++++++++++++++ .../api/alias/WeaviateAliasClientAsync.java | 50 +++++++++++++ 6 files changed, 147 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java b/src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java index d791fb360..7073f0faf 100644 --- a/src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java +++ b/src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java @@ -19,7 +19,14 @@ public class WeaviateClient implements Closeable { private final RestTransport restTransport; private final GrpcTransport grpcTransport; + /** + * Client for {@code /schema} endpoints for managing Weaviate collections. + * See {@link WeaviateCollectionsClient#use} for populating and querying + * collections. + */ public final WeaviateCollectionsClient collections; + + /** Client for {@code /aliases} endpoints for managing collection aliases. */ public final WeaviateAliasClient alias; public WeaviateClient(Config config) { diff --git a/src/main/java/io/weaviate/client6/v1/api/WeaviateClientAsync.java b/src/main/java/io/weaviate/client6/v1/api/WeaviateClientAsync.java index d26e86d8a..f3eae01b3 100644 --- a/src/main/java/io/weaviate/client6/v1/api/WeaviateClientAsync.java +++ b/src/main/java/io/weaviate/client6/v1/api/WeaviateClientAsync.java @@ -5,6 +5,7 @@ import java.util.function.Function; import io.weaviate.client6.v1.api.alias.WeaviateAliasClientAsync; +import io.weaviate.client6.v1.api.collections.WeaviateCollectionsClient; import io.weaviate.client6.v1.api.collections.WeaviateCollectionsClientAsync; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.grpc.DefaultGrpcTransport; @@ -16,7 +17,14 @@ public class WeaviateClientAsync implements Closeable { private final RestTransport restTransport; private final GrpcTransport grpcTransport; + /** + * Client for {@code /schema} endpoints for managing Weaviate collections. + * See {@link WeaviateCollectionsClient#use} for populating and querying + * collections. + */ public final WeaviateCollectionsClientAsync collections; + + /** Client for {@code /aliases} endpoints for managing collection aliases. */ public final WeaviateAliasClientAsync alias; public WeaviateClientAsync(Config config) { diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/Alias.java b/src/main/java/io/weaviate/client6/v1/api/alias/Alias.java index c2693b55f..d19c68216 100644 --- a/src/main/java/io/weaviate/client6/v1/api/alias/Alias.java +++ b/src/main/java/io/weaviate/client6/v1/api/alias/Alias.java @@ -2,5 +2,9 @@ import com.google.gson.annotations.SerializedName; -public record Alias(@SerializedName("class") String collection, @SerializedName("alias") String alias) { +public record Alias( + /** Original collection name. */ + @SerializedName("class") String collection, + /** Collection alias. */ + @SerializedName("alias") String alias) { } diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/ListAliasRequest.java b/src/main/java/io/weaviate/client6/v1/api/alias/ListAliasRequest.java index ce20e4a1e..89940269f 100644 --- a/src/main/java/io/weaviate/client6/v1/api/alias/ListAliasRequest.java +++ b/src/main/java/io/weaviate/client6/v1/api/alias/ListAliasRequest.java @@ -19,10 +19,12 @@ public record ListAliasRequest(String collection) { : Collections.emptyMap(), (statusCode, response) -> JSON.deserialize(response, ListAliasResponse.class).aliases()); + /** Create default ListAliasRequest. */ public static ListAliasRequest of() { return of(ObjectBuilder.identity()); } + /** Create ListAliasRequest with optional parameters. */ public static ListAliasRequest of(Function> fn) { return fn.apply(new Builder()).build(); } @@ -34,6 +36,7 @@ public ListAliasRequest(Builder builder) { public static class Builder implements ObjectBuilder { private String collection; + /** Return only aliases which reference this collection. */ public Builder collection(String collection) { this.collection = collection; return this; diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClient.java b/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClient.java index 1f16c5f84..08bcb3843 100644 --- a/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClient.java +++ b/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClient.java @@ -5,6 +5,7 @@ import java.util.Optional; import java.util.function.Function; +import io.weaviate.client6.v1.api.WeaviateApiException; import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.rest.RestTransport; @@ -15,18 +16,59 @@ public WeaviateAliasClient(RestTransport restTransport) { this.restTransport = restTransport; } + /** + * Create a new collection alias. + * + * @param collection Original collection name. + * @param alias Collection alias. + * @throws WeaviateApiException in case the server returned with an + * error status code. + * @throws IOException in case the request was not sent successfully + * due to a malformed request, a networking error + * or the server being unavailable. + */ public void create(String collection, String alias) throws IOException { create(new Alias(collection, alias)); } + /** + * Create a new collection alias. + * + * @param alias Alias object. + * @throws WeaviateApiException in case the server returned with an + * error status code. + * @throws IOException in case the request was not sent successfully + * due to a malformed request, a networking error + * or the server being unavailable. + */ public void create(Alias alias) throws IOException { this.restTransport.performRequest(new CreateAliasRequest(alias), CreateAliasRequest._ENDPOINT); } + /** + * List all collection aliases defined in the cluster. + * + * @throws WeaviateApiException in case the server returned with an + * error status code. + * @throws IOException in case the request was not sent successfully + * due to a malformed request, a networking error + * or the server being unavailable. + */ public List list() throws IOException { return list(ListAliasRequest.of()); } + /** + * List all collection aliases defined in the cluster. + * + * @param fn Lambda expression for optional parameters. + * @throws WeaviateApiException in case the server returned with an + * error status code. + * @throws IOException in case the request was not sent successfully + * due to a malformed request, a networking error + * or the server being unavailable. + * @return A list of aliases. + */ public List list(Function> fn) throws IOException { return list(ListAliasRequest.of(fn)); } @@ -35,15 +77,47 @@ private List list(ListAliasRequest request) throws IOException { return this.restTransport.performRequest(request, ListAliasRequest._ENDPOINT); } + /** + * Get alias by name. + * + * @param alias Collection alias. + * @throws WeaviateApiException in case the server returned with an + * error status code. + * @throws IOException in case the request was not sent successfully + * due to a malformed request, a networking error + * or the server being unavailable. + * @return Alias if one exists and empty {@code Optional} otherwise. + */ public Optional get(String alias) throws IOException { return this.restTransport.performRequest(new GetAliasRequest(alias), GetAliasRequest._ENDPOINT); } + /** + * Change which collection this alias references. + * + * @param alias Collection alias. + * @param newTargetCollection Collection name. + * @throws WeaviateApiException in case the server returned with an + * error status code. + * @throws IOException in case the request was not sent successfully + * due to a malformed request, a networking error + * or the server being unavailable. + */ public void update(String alias, String newTargetCollection) throws IOException { this.restTransport.performRequest(new UpdateAliasRequest(alias, newTargetCollection), UpdateAliasRequest._ENDPOINT); } + /** + * Delete an alias. The previously aliased collection is not affected. + * + * @param alias Collection alias. + * @throws WeaviateApiException in case the server returned with an + * error status code. + * @throws IOException in case the request was not sent successfully + * due to a malformed request, a networking error + * or the server being unavailable. + */ public void delete(String alias) throws IOException { this.restTransport.performRequest(new DeleteAliasRequest(alias), DeleteAliasRequest._ENDPOINT); } diff --git a/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClientAsync.java b/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClientAsync.java index 2bc9de02b..b7de85a06 100644 --- a/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClientAsync.java +++ b/src/main/java/io/weaviate/client6/v1/api/alias/WeaviateAliasClientAsync.java @@ -8,6 +8,7 @@ import io.weaviate.client6.v1.internal.ObjectBuilder; import io.weaviate.client6.v1.internal.rest.RestTransport; +/** Async client for {@code /aliases} endpoints. */ public class WeaviateAliasClientAsync { private final RestTransport restTransport; @@ -15,18 +16,45 @@ public WeaviateAliasClientAsync(RestTransport restTransport) { this.restTransport = restTransport; } + /** + * Create a new collection alias. + * + * @param collection Original collection name. + * @param alias Collection alias. + * + * @return A future holding the server's response. + */ public CompletableFuture create(String collection, String alias) { return create(new Alias(collection, alias)); } + /** + * Create a new collection alias. + * + * @param alias Alias object. + * + * @return A future holding the server's response. + */ public CompletableFuture create(Alias alias) { return this.restTransport.performRequestAsync(new CreateAliasRequest(alias), CreateAliasRequest._ENDPOINT); } + /** + * List all collection aliases defined in the cluster. + * + * @return A future holding the server's response. + */ public CompletableFuture> list() { return list(ListAliasRequest.of()); } + /** + * List all collection aliases defined in the cluster. + * + * @param fn Lambda expression for optional parameters. + * + * @return A future holding the server's response. + */ public CompletableFuture> list(Function> fn) { return list(ListAliasRequest.of(fn)); } @@ -35,15 +63,37 @@ private CompletableFuture> list(ListAliasRequest request) { return this.restTransport.performRequestAsync(request, ListAliasRequest._ENDPOINT); } + /** + * Get alias by name. + * + * @param alias Collection alias. + * + * @return A future holding the server's response. + */ public CompletableFuture> get(String alias) { return this.restTransport.performRequestAsync(new GetAliasRequest(alias), GetAliasRequest._ENDPOINT); } + /** + * Change which collection this alias references. + * + * @param alias Collection alias. + * @param newTargetCollection Collection name. + * + * @return A future holding the server's response. + */ public CompletableFuture update(String alias, String newTargetCollection) { return this.restTransport.performRequestAsync(new UpdateAliasRequest(alias, newTargetCollection), UpdateAliasRequest._ENDPOINT); } + /** + * Delete an alias. The previously aliased collection is not affected. + * + * @param alias Collection alias. + * + * @return A future holding the server's response. + */ public CompletableFuture delete(String alias) { return this.restTransport.performRequestAsync(new DeleteAliasRequest(alias), DeleteAliasRequest._ENDPOINT); }