Skip to content

Commit 69efede

Browse files
Revert "Revert "[Search] Add system index descriptors to Connector indices (#…"
This reverts commit ddb97cc.
1 parent 6c40509 commit 69efede

File tree

15 files changed

+230
-375
lines changed

15 files changed

+230
-375
lines changed

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/ClientHelper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ private static String maybeRewriteSingleAuthenticationHeaderForVersion(
196196
public static final String APM_ORIGIN = "apm";
197197
public static final String OTEL_ORIGIN = "otel";
198198
public static final String REINDEX_DATA_STREAM_ORIGIN = "reindex_data_stream";
199+
// TODO consolidate the Kibana origin with the one defined in org/elasticsearch/kibana/KibanaPlugin.java
200+
public static final String KIBANA_ORIGIN = "kibana";
201+
public static final String CLOUD_ORIGIN = "cloud";
199202

200203
private ClientHelper() {}
201204

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
{
2-
"template": {
3-
"aliases": {
4-
".elastic-connectors-sync-jobs": {}
5-
},
6-
"mappings": {
7-
"dynamic": "false",
2+
"settings": {
3+
"index": {
4+
"number_of_shards": "1",
5+
"auto_expand_replicas": "0-1"
6+
}
7+
},
8+
"mappings": {
9+
"_doc": {
10+
"dynamic": "strict",
811
"_meta": {
9-
"version": ${xpack.application.connector.template.version}
12+
"version": "${elastic-connectors-sync-jobs.version}",
13+
"managed_index_mappings_version": ${elastic-connectors-sync-jobs.managed.index.version}
1014
},
1115
"properties": {
1216
"cancelation_requested_at": {
@@ -21,9 +25,11 @@
2125
"connector": {
2226
"properties": {
2327
"configuration": {
28+
"dynamic": "false",
2429
"type": "object"
2530
},
2631
"filtering": {
32+
"dynamic": "false",
2733
"properties": {
2834
"advanced_snippet": {
2935
"properties": {
@@ -91,6 +97,7 @@
9197
"type": "keyword"
9298
},
9399
"pipeline": {
100+
"dynamic": "false",
94101
"properties": {
95102
"extract_binary_content": {
96103
"type": "boolean"
@@ -110,6 +117,7 @@
110117
"type": "keyword"
111118
},
112119
"sync_cursor": {
120+
"dynamic": "false",
113121
"type": "object"
114122
}
115123
}
@@ -136,6 +144,7 @@
136144
"type": "date"
137145
},
138146
"metadata": {
147+
"dynamic": "false",
139148
"type": "object"
140149
},
141150
"started_at": {
@@ -155,10 +164,5 @@
155164
}
156165
}
157166
}
158-
},
159-
"_meta": {
160-
"description": "Built-in mappings applied by default to elastic-connectors indices",
161-
"managed": true
162-
},
163-
"version": ${xpack.application.connector.template.version}
167+
}
164168
}
Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,43 @@
11
{
2-
"template": {
3-
"aliases": {
4-
".elastic-connectors": {}
5-
},
6-
"mappings": {
7-
"dynamic": "false",
2+
"settings": {
3+
"index": {
4+
"number_of_shards": "1",
5+
"auto_expand_replicas": "0-1"
6+
}
7+
},
8+
"mappings": {
9+
"_doc": {
10+
"dynamic": "strict",
811
"_meta": {
9-
"pipeline": {
10-
"default_name": "search-default-ingestion",
11-
"default_extract_binary_content": true,
12-
"default_run_ml_inference": true,
13-
"default_reduce_whitespace": true
14-
},
15-
"version": ${xpack.application.connector.template.version}
12+
"version": "${elastic-connectors.version}",
13+
"managed_index_mappings_version": ${elastic-connectors.managed.index.version}
1614
},
1715
"properties": {
1816
"api_key_id": {
1917
"type": "keyword"
2018
},
19+
"api_key_secret_id": {
20+
"type": "keyword"
21+
},
2122
"configuration": {
23+
"dynamic": "false",
2224
"type": "object"
2325
},
2426
"custom_scheduling": {
27+
"dynamic": "false",
2528
"type": "object"
2629
},
30+
"deleted": {
31+
"type": "boolean"
32+
},
2733
"description": {
2834
"type": "text"
2935
},
3036
"error": {
3137
"type": "keyword"
3238
},
3339
"features": {
40+
"dynamic": "false",
3441
"properties": {
3542
"filtering_advanced_config": {
3643
"type": "boolean"
@@ -66,6 +73,7 @@
6673
}
6774
},
6875
"filtering": {
76+
"dynamic": "false",
6977
"properties": {
7078
"active": {
7179
"properties": {
@@ -78,6 +86,7 @@
7886
"type": "date"
7987
},
8088
"value": {
89+
"dynamic": "false",
8190
"type": "object"
8291
}
8392
}
@@ -143,6 +152,7 @@
143152
"type": "date"
144153
},
145154
"value": {
155+
"dynamic": "false",
146156
"type": "object"
147157
}
148158
}
@@ -242,6 +252,7 @@
242252
"type": "keyword"
243253
},
244254
"pipeline": {
255+
"dynamic": "false",
245256
"properties": {
246257
"extract_binary_content": {
247258
"type": "boolean"
@@ -258,6 +269,7 @@
258269
}
259270
},
260271
"scheduling": {
272+
"dynamic": "false",
261273
"properties": {
262274
"access_control": {
263275
"properties": {
@@ -298,22 +310,13 @@
298310
"type": "keyword"
299311
},
300312
"sync_cursor": {
313+
"dynamic": "false",
301314
"type": "object"
302315
},
303316
"sync_now": {
304317
"type": "boolean"
305-
},
306-
"deleted": {
307-
"type": "boolean"
308318
}
309319
}
310320
}
311-
},
312-
"_meta": {
313-
"description": "Built-in mappings applied by default to elastic-connectors indices",
314-
"managed": true
315-
},
316-
"version": ${xpack.application.connector.template.version}
321+
}
317322
}
318-
319-

x-pack/plugin/core/template-resources/src/main/resources/entsearch/connector/elastic-connectors-settings.json

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

x-pack/plugin/core/template-resources/src/main/resources/entsearch/connector/elastic-connectors-sync-jobs.json

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

x-pack/plugin/core/template-resources/src/main/resources/entsearch/connector/elastic-connectors.json

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

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/EnterpriseSearch.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import org.elasticsearch.xpack.application.analytics.action.TransportPutAnalyticsCollectionAction;
4747
import org.elasticsearch.xpack.application.analytics.ingest.AnalyticsEventIngestConfig;
4848
import org.elasticsearch.xpack.application.connector.ConnectorAPIFeature;
49+
import org.elasticsearch.xpack.application.connector.ConnectorIndexService;
4950
import org.elasticsearch.xpack.application.connector.ConnectorTemplateRegistry;
5051
import org.elasticsearch.xpack.application.connector.action.DeleteConnectorAction;
5152
import org.elasticsearch.xpack.application.connector.action.GetConnectorAction;
@@ -124,6 +125,7 @@
124125
import org.elasticsearch.xpack.application.connector.secrets.action.TransportGetConnectorSecretAction;
125126
import org.elasticsearch.xpack.application.connector.secrets.action.TransportPostConnectorSecretAction;
126127
import org.elasticsearch.xpack.application.connector.secrets.action.TransportPutConnectorSecretAction;
128+
import org.elasticsearch.xpack.application.connector.syncjob.ConnectorSyncJobIndexService;
127129
import org.elasticsearch.xpack.application.connector.syncjob.action.CancelConnectorSyncJobAction;
128130
import org.elasticsearch.xpack.application.connector.syncjob.action.CheckInConnectorSyncJobAction;
129131
import org.elasticsearch.xpack.application.connector.syncjob.action.ClaimConnectorSyncJobAction;
@@ -477,7 +479,12 @@ public Collection<?> createComponents(PluginServices services) {
477479
@Override
478480
public Collection<SystemIndexDescriptor> getSystemIndexDescriptors(Settings settings) {
479481
Collection<SystemIndexDescriptor> systemIndices = new ArrayList<>(
480-
List.of(SearchApplicationIndexService.getSystemIndexDescriptor(), QueryRulesIndexService.getSystemIndexDescriptor())
482+
List.of(
483+
SearchApplicationIndexService.getSystemIndexDescriptor(),
484+
QueryRulesIndexService.getSystemIndexDescriptor(),
485+
ConnectorSyncJobIndexService.getSystemIndexDescriptor(),
486+
ConnectorIndexService.getSystemIndexDescriptor()
487+
)
481488
);
482489

483490
if (ConnectorSecretsFeature.isEnabled()) {

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/ConnectorIndexService.java

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
import org.elasticsearch.ElasticsearchStatusException;
1111
import org.elasticsearch.ExceptionsHelper;
1212
import org.elasticsearch.ResourceNotFoundException;
13+
import org.elasticsearch.Version;
1314
import org.elasticsearch.action.ActionListener;
1415
import org.elasticsearch.action.DelegatingActionListener;
1516
import org.elasticsearch.action.DocWriteRequest;
1617
import org.elasticsearch.action.DocWriteResponse;
18+
import org.elasticsearch.action.admin.indices.template.put.PutIndexTemplateRequest;
1719
import org.elasticsearch.action.delete.DeleteRequest;
1820
import org.elasticsearch.action.get.GetRequest;
1921
import org.elasticsearch.action.index.IndexRequest;
@@ -33,6 +35,7 @@
3335
import org.elasticsearch.index.query.TermQueryBuilder;
3436
import org.elasticsearch.index.query.TermsQueryBuilder;
3537
import org.elasticsearch.index.query.WildcardQueryBuilder;
38+
import org.elasticsearch.indices.SystemIndexDescriptor;
3639
import org.elasticsearch.rest.RestStatus;
3740
import org.elasticsearch.script.Script;
3841
import org.elasticsearch.script.ScriptType;
@@ -59,6 +62,7 @@
5962
import org.elasticsearch.xpack.application.connector.filtering.FilteringValidationState;
6063
import org.elasticsearch.xpack.application.connector.syncjob.ConnectorSyncJob;
6164
import org.elasticsearch.xpack.application.connector.syncjob.ConnectorSyncJobIndexService;
65+
import org.elasticsearch.xpack.core.template.TemplateUtils;
6266

6367
import java.time.Instant;
6468
import java.util.ArrayList;
@@ -76,6 +80,7 @@
7680
import static org.elasticsearch.xcontent.XContentFactory.jsonBuilder;
7781
import static org.elasticsearch.xpack.application.connector.ConnectorFiltering.fromXContentBytesConnectorFiltering;
7882
import static org.elasticsearch.xpack.application.connector.ConnectorFiltering.sortFilteringRulesByOrder;
83+
import static org.elasticsearch.xpack.application.connector.ConnectorTemplateRegistry.CONNECTORS_ALLOWED_PRODUCT_ORIGINS;
7984
import static org.elasticsearch.xpack.application.connector.ConnectorTemplateRegistry.MANAGED_CONNECTOR_INDEX_PREFIX;
8085
import static org.elasticsearch.xpack.core.ClientHelper.CONNECTORS_ORIGIN;
8186

@@ -87,7 +92,20 @@ public class ConnectorIndexService {
8792
// The client to interact with the system index (internal user).
8893
private final Client clientWithOrigin;
8994

90-
public static final String CONNECTOR_INDEX_NAME = ConnectorTemplateRegistry.CONNECTOR_INDEX_NAME_PATTERN;
95+
// TODO use proper version IDs (see org/elasticsearch/xpack/application/rules/QueryRulesIndexService.java)
96+
// TODO if this version is updated, a test should be added to
97+
// javaRestTest/java/org/elasticsearch/xpack/application/FullClusterRestartIT.java
98+
private static final int CONNECTORS_INDEX_VERSION = 1;
99+
// TODO rename to CONNECTOR_ALIAS_NAME
100+
public static final String CONNECTOR_INDEX_NAME = ".elastic-connectors";
101+
public static final String CONNECTOR_INDEX_PREFIX = ".elastic-connectors-v";
102+
public static final String CONNECTOR_CONCRETE_INDEX_NAME = CONNECTOR_INDEX_PREFIX + CONNECTORS_INDEX_VERSION;
103+
// The index pattern needs a stricter regex to prevent conflicts with .elastic-connectors-sync-jobs
104+
105+
public static final String CONNECTOR_INDEX_NAME_PATTERN = CONNECTOR_INDEX_PREFIX + "*";
106+
107+
private static final String CONNECTORS_MAPPING_VERSION_VARIABLE = "elastic-connectors.version";
108+
private static final String CONNECTORS_MAPPING_MANAGED_VERSION_VARIABLE = "elastic-connectors.managed.index.version";
91109

92110
/**
93111
* @param client A client for executing actions on the connector index
@@ -96,6 +114,36 @@ public ConnectorIndexService(Client client) {
96114
this.clientWithOrigin = new OriginSettingClient(client, CONNECTORS_ORIGIN);
97115
}
98116

117+
/**
118+
* Returns the {@link SystemIndexDescriptor} for the Connector system index.
119+
*
120+
* @return The {@link SystemIndexDescriptor} for the Connector system index.
121+
*/
122+
public static SystemIndexDescriptor getSystemIndexDescriptor() {
123+
PutIndexTemplateRequest request = new PutIndexTemplateRequest();
124+
String templateSource = TemplateUtils.loadTemplate(
125+
"/elastic-connectors.json",
126+
Version.CURRENT.toString(),
127+
CONNECTORS_MAPPING_VERSION_VARIABLE,
128+
Map.of(CONNECTORS_MAPPING_MANAGED_VERSION_VARIABLE, Integer.toString(CONNECTORS_INDEX_VERSION))
129+
);
130+
request.source(templateSource, XContentType.JSON);
131+
132+
// The index pattern needs a stricter regex to prevent conflicts with .elastic-connectors-sync-jobs
133+
return SystemIndexDescriptor.builder()
134+
.setIndexPattern(CONNECTOR_INDEX_NAME_PATTERN)
135+
.setPrimaryIndex(CONNECTOR_CONCRETE_INDEX_NAME)
136+
.setAliasName(CONNECTOR_INDEX_NAME)
137+
.setDescription("Search connectors")
138+
.setMappings(request.mappings())
139+
.setSettings(request.settings())
140+
.setOrigin(CONNECTORS_ORIGIN)
141+
.setType(SystemIndexDescriptor.Type.EXTERNAL_MANAGED)
142+
.setAllowedElasticProductOrigins(CONNECTORS_ALLOWED_PRODUCT_ORIGINS)
143+
.setNetNew()
144+
.build();
145+
}
146+
99147
/**
100148
* Creates or updates the {@link Connector} in the underlying index with a specific doc ID
101149
* if connectorId is provided. Otherwise, the connector doc is indexed with auto-generated doc ID.

0 commit comments

Comments
 (0)