Skip to content

Commit d3dbb53

Browse files
committed
Move Node back to its original location. TransportHttpClient is self-contained
1 parent f9a224b commit d3dbb53

File tree

7 files changed

+110
-137
lines changed

7 files changed

+110
-137
lines changed

java-client/src/main/java/co/elastic/clients/transport/http/Node.java

Lines changed: 0 additions & 132 deletions
This file was deleted.

java-client/src/main/java/co/elastic/clients/transport/http/RepeatableBodyResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public RepeatableBodyResponse(TransportHttpClient.Response response) throws IOEx
4545
}
4646

4747
@Override
48-
public Node node() {
48+
public TransportHttpClient.Node node() {
4949
return response.node();
5050
}
5151

java-client/src/main/java/co/elastic/clients/transport/http/TransportHttpClient.java

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,12 @@
2626
import javax.annotation.Nullable;
2727
import java.io.Closeable;
2828
import java.io.IOException;
29+
import java.net.URI;
2930
import java.nio.ByteBuffer;
3031
import java.util.List;
3132
import java.util.Map;
33+
import java.util.Objects;
34+
import java.util.Set;
3235
import java.util.concurrent.CompletableFuture;
3336

3437
/**
@@ -182,4 +185,110 @@ interface Response extends Closeable {
182185
*/
183186
void close() throws IOException;
184187
}
188+
189+
/**
190+
* A node/host to send requests to.
191+
*/
192+
class Node {
193+
private final URI uri;
194+
private final String name;
195+
private final String version;
196+
private final Set<String> roles;
197+
private final Map<String, String> attributes;
198+
199+
/**
200+
* Create a node with its URI, roles and attributes.
201+
* <p>
202+
* If the URI doesn't end with a '{@code /}', then one is added.
203+
*
204+
* @param uri the node's URI
205+
* @param name the node name/identifier
206+
* @param version the node's version, if known
207+
* @param roles the node's roles, such as "master", "ingest", etc.
208+
* @param attributes the node's attributes. This can be used for routing decisions by multi-node implementations.
209+
*/
210+
public Node(
211+
URI uri,
212+
@Nullable String name,
213+
@Nullable String version,
214+
@Nullable Set<String> roles,
215+
@Nullable Map<String, String> attributes
216+
) {
217+
218+
if (!uri.isAbsolute()) {
219+
throw new IllegalArgumentException("Node URIs must be absolute: " + uri);
220+
}
221+
222+
if (!uri.getRawPath().endsWith("/")) {
223+
uri = uri.resolve(uri.getRawPath() + "/");
224+
}
225+
226+
this.uri = uri;
227+
this.name = name;
228+
this.version = version;
229+
this.roles = roles;
230+
this.attributes = attributes;
231+
}
232+
233+
public Node(URI uri) {
234+
this(uri, null, null, null, null);
235+
}
236+
237+
public Node(String uri) {
238+
this(URI.create(uri), null, null, null, null);
239+
}
240+
241+
/**
242+
* The URI of this node. This is an absolute URL with a path ending with a "/".
243+
*/
244+
public URI uri() {
245+
return this.uri;
246+
}
247+
248+
/**
249+
* The node name/identifier
250+
*/
251+
@Nullable
252+
public String name() {
253+
return name;
254+
}
255+
256+
@Nullable
257+
public String version() {
258+
return version;
259+
}
260+
261+
@Nullable
262+
public Set<String> roles() {
263+
return roles;
264+
}
265+
266+
@Nullable
267+
public Map<String, String> attributes() {
268+
return attributes;
269+
}
270+
271+
@Override
272+
public String toString() {
273+
return uri.toString();
274+
}
275+
276+
/**
277+
* Two nodes are considered equal if their URIs are equal. Other properties are ignored.
278+
*/
279+
@Override
280+
public boolean equals(Object o) {
281+
if (this == o) return true;
282+
if (!(o instanceof Node node)) return false;
283+
return Objects.equals(uri, node.uri);
284+
}
285+
286+
/**
287+
* A node's hash code is that of its URI. Other properties are ignored.
288+
*/
289+
@Override
290+
public int hashCode() {
291+
return Objects.hash(uri);
292+
}
293+
}
185294
}

java-client/src/main/java/co/elastic/clients/transport/rest5_client/Rest5ClientHttpClient.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import co.elastic.clients.transport.TransportOptions;
2323
import co.elastic.clients.transport.http.HeaderMap;
24-
import co.elastic.clients.transport.http.Node;
2524
import co.elastic.clients.transport.http.TransportHttpClient;
2625
import co.elastic.clients.transport.rest5_client.low_level.Cancellable;
2726
import co.elastic.clients.transport.rest5_client.low_level.ResponseListener;

java-client/src/main/java/co/elastic/clients/transport/rest_client/RestClientHttpClient.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
import co.elastic.clients.transport.TransportOptions;
2323
import co.elastic.clients.transport.http.HeaderMap;
24-
import co.elastic.clients.transport.http.Node;
2524
import co.elastic.clients.transport.http.TransportHttpClient;
2625
import co.elastic.clients.util.BinaryData;
2726
import co.elastic.clients.util.NoCopyByteArrayOutputStream;

java-client/src/test/java/co/elastic/clients/testkit/MockHttpClient.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import co.elastic.clients.transport.ElasticsearchTransportBase;
2525
import co.elastic.clients.transport.TransportException;
2626
import co.elastic.clients.transport.TransportOptions;
27-
import co.elastic.clients.transport.http.Node;
2827
import co.elastic.clients.transport.http.TransportHttpClient;
2928
import co.elastic.clients.util.BinaryData;
3029
import org.jetbrains.annotations.Nullable;

java-client/src/test/java/co/elastic/clients/transport/endpoints/SimpleEndpointTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import co.elastic.clients.transport.ElasticsearchTransport;
2727
import co.elastic.clients.transport.ElasticsearchTransportBase;
2828
import co.elastic.clients.transport.TransportOptions;
29-
import co.elastic.clients.transport.http.Node;
3029
import co.elastic.clients.transport.http.TransportHttpClient;
3130
import org.jetbrains.annotations.Nullable;
3231
import org.junit.jupiter.api.Test;

0 commit comments

Comments
 (0)