Skip to content

Commit 058c1e7

Browse files
Adding eis connection pool to diagnostics
1 parent feb60d9 commit 058c1e7

File tree

5 files changed

+47
-17
lines changed

5 files changed

+47
-17
lines changed

server/src/main/java/org/elasticsearch/TransportVersions.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,7 @@ static TransportVersion def(int id) {
366366
public static final TransportVersion SIMULATE_INGEST_EFFECTIVE_MAPPING = def(9_140_0_00);
367367
public static final TransportVersion RESOLVE_INDEX_MODE_ADDED = def(9_141_0_00);
368368
public static final TransportVersion DATA_STREAM_WRITE_INDEX_ONLY_SETTINGS = def(9_142_0_00);
369+
public static final TransportVersion INFERENCE_DIAGNOSTICS_FOR_EIS = def(9_143_0_00);
369370

370371
/*
371372
* STOP! READ THIS FIRST! No, really,

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/inference/action/GetInferenceDiagnosticsAction.java

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
package org.elasticsearch.xpack.core.inference.action;
99

1010
import org.apache.http.pool.PoolStats;
11+
import org.elasticsearch.TransportVersions;
1112
import org.elasticsearch.action.ActionType;
1213
import org.elasticsearch.action.FailedNodeException;
1314
import org.elasticsearch.action.support.nodes.BaseNodeResponse;
@@ -116,29 +117,44 @@ public int hashCode() {
116117

117118
public static class NodeResponse extends BaseNodeResponse implements ToXContentFragment {
118119
static final String CONNECTION_POOL_STATS_FIELD_NAME = "connection_pool_stats";
120+
static final String EIS_CONNECTION_POOL_STATS_FIELD_NAME = "eis_connection_pool_stats";
119121

120-
private final ConnectionPoolStats connectionPoolStats;
122+
private final ConnectionPoolStats externalConnectionPoolStats;
123+
private final ConnectionPoolStats eisConnectionPoolStats;
121124

122-
public NodeResponse(DiscoveryNode node, PoolStats poolStats) {
125+
public NodeResponse(DiscoveryNode node, PoolStats externalPoolStats, PoolStats eisPoolStats) {
123126
super(node);
124-
connectionPoolStats = ConnectionPoolStats.of(poolStats);
127+
externalConnectionPoolStats = ConnectionPoolStats.of(externalPoolStats);
128+
eisConnectionPoolStats = ConnectionPoolStats.of(eisPoolStats);
125129
}
126130

127131
public NodeResponse(StreamInput in) throws IOException {
128132
super(in);
129133

130-
connectionPoolStats = new ConnectionPoolStats(in);
134+
externalConnectionPoolStats = new ConnectionPoolStats(in);
135+
if (in.getTransportVersion().onOrAfter(TransportVersions.INFERENCE_DIAGNOSTICS_FOR_EIS)) {
136+
eisConnectionPoolStats = new ConnectionPoolStats(in);
137+
} else {
138+
eisConnectionPoolStats = null; // EIS stats are not available in older versions
139+
}
131140
}
132141

133142
@Override
134143
public void writeTo(StreamOutput out) throws IOException {
135144
super.writeTo(out);
136-
connectionPoolStats.writeTo(out);
145+
externalConnectionPoolStats.writeTo(out);
146+
147+
if (out.getTransportVersion().onOrAfter(TransportVersions.INFERENCE_DIAGNOSTICS_FOR_EIS)) {
148+
eisConnectionPoolStats.writeTo(out);
149+
}
137150
}
138151

139152
@Override
140153
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
141-
builder.field(CONNECTION_POOL_STATS_FIELD_NAME, connectionPoolStats, params);
154+
builder.field(CONNECTION_POOL_STATS_FIELD_NAME, externalConnectionPoolStats, params);
155+
if (eisConnectionPoolStats != null) {
156+
builder.field(EIS_CONNECTION_POOL_STATS_FIELD_NAME, eisConnectionPoolStats, params);
157+
}
142158
return builder;
143159
}
144160

@@ -147,16 +163,21 @@ public boolean equals(Object o) {
147163
if (this == o) return true;
148164
if (o == null || getClass() != o.getClass()) return false;
149165
NodeResponse response = (NodeResponse) o;
150-
return Objects.equals(connectionPoolStats, response.connectionPoolStats);
166+
return Objects.equals(externalConnectionPoolStats, response.externalConnectionPoolStats)
167+
&& Objects.equals(eisConnectionPoolStats, response.eisConnectionPoolStats);
151168
}
152169

153170
@Override
154171
public int hashCode() {
155-
return Objects.hash(connectionPoolStats);
172+
return Objects.hash(externalConnectionPoolStats, eisConnectionPoolStats);
173+
}
174+
175+
ConnectionPoolStats getExternalConnectionPoolStats() {
176+
return externalConnectionPoolStats;
156177
}
157178

158-
ConnectionPoolStats getConnectionPoolStats() {
159-
return connectionPoolStats;
179+
ConnectionPoolStats getEisConnectionPoolStats() {
180+
return eisConnectionPoolStats;
160181
}
161182

162183
static class ConnectionPoolStats implements ToXContentObject, Writeable {

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/inference/action/GetInferenceDiagnosticsActionNodeResponseTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ protected GetInferenceDiagnosticsAction.NodeResponse createTestInstance() {
4040
protected GetInferenceDiagnosticsAction.NodeResponse mutateInstance(GetInferenceDiagnosticsAction.NodeResponse instance)
4141
throws IOException {
4242
var select = randomIntBetween(0, 3);
43-
var connPoolStats = instance.getConnectionPoolStats();
43+
var connPoolStats = instance.getExternalConnectionPoolStats();
4444

4545
return switch (select) {
4646
case 0 -> new GetInferenceDiagnosticsAction.NodeResponse(

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/InferencePlugin.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,8 @@ public class InferencePlugin extends Plugin
219219
private final SetOnce<ModelRegistry> modelRegistry = new SetOnce<>();
220220
private List<InferenceServiceExtension> inferenceServiceExtensions;
221221

222+
public record ClientManagers(HttpClientManager externalManager, HttpClientManager eisManager) {}
223+
222224
public InferencePlugin(Settings settings) {
223225
this.settings = settings;
224226
}
@@ -302,6 +304,8 @@ public Collection<?> createComponents(PluginServices services) {
302304
inferenceServiceSettings.getConnectionTtl()
303305
);
304306

307+
var clientManagers = new ClientManagers(httpClientManager, elasticInferenceServiceHttpClientManager);
308+
305309
var elasticInferenceServiceRequestSenderFactory = new HttpRequestSender.Factory(
306310
serviceComponents.get(),
307311
elasticInferenceServiceHttpClientManager,
@@ -373,7 +377,7 @@ public Collection<?> createComponents(PluginServices services) {
373377

374378
components.add(serviceRegistry);
375379
components.add(modelRegistry.get());
376-
components.add(httpClientManager);
380+
components.add(clientManagers);
377381
components.add(inferenceStatsBinding);
378382

379383
// Only add InferenceServiceNodeLocalRateLimitCalculator (which is a ClusterStateListener) for cluster aware rate limiting,

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/action/TransportGetInferenceDiagnosticsAction.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.elasticsearch.threadpool.ThreadPool;
1919
import org.elasticsearch.transport.TransportService;
2020
import org.elasticsearch.xpack.core.inference.action.GetInferenceDiagnosticsAction;
21-
import org.elasticsearch.xpack.inference.external.http.HttpClientManager;
21+
import org.elasticsearch.xpack.inference.InferencePlugin;
2222

2323
import java.io.IOException;
2424
import java.util.List;
@@ -31,15 +31,15 @@ public class TransportGetInferenceDiagnosticsAction extends TransportNodesAction
3131
GetInferenceDiagnosticsAction.NodeResponse,
3232
Void> {
3333

34-
private final HttpClientManager httpClientManager;
34+
private final InferencePlugin.ClientManagers httpClientManagers;
3535

3636
@Inject
3737
public TransportGetInferenceDiagnosticsAction(
3838
ThreadPool threadPool,
3939
ClusterService clusterService,
4040
TransportService transportService,
4141
ActionFilters actionFilters,
42-
HttpClientManager httpClientManager
42+
InferencePlugin.ClientManagers managers
4343
) {
4444
super(
4545
GetInferenceDiagnosticsAction.NAME,
@@ -50,7 +50,7 @@ public TransportGetInferenceDiagnosticsAction(
5050
threadPool.executor(ThreadPool.Names.MANAGEMENT)
5151
);
5252

53-
this.httpClientManager = Objects.requireNonNull(httpClientManager);
53+
this.httpClientManagers = Objects.requireNonNull(managers);
5454
}
5555

5656
@Override
@@ -74,6 +74,10 @@ protected GetInferenceDiagnosticsAction.NodeResponse newNodeResponse(StreamInput
7474

7575
@Override
7676
protected GetInferenceDiagnosticsAction.NodeResponse nodeOperation(GetInferenceDiagnosticsAction.NodeRequest request, Task task) {
77-
return new GetInferenceDiagnosticsAction.NodeResponse(transportService.getLocalNode(), httpClientManager.getPoolStats());
77+
return new GetInferenceDiagnosticsAction.NodeResponse(
78+
transportService.getLocalNode(),
79+
httpClientManagers.externalManager().getPoolStats(),
80+
httpClientManagers.eisManager().getPoolStats()
81+
);
7882
}
7983
}

0 commit comments

Comments
 (0)