Skip to content

Commit 0d404d9

Browse files
authored
[Connector API] Allow for partial updates in update last sync stats endpoint (#108955)
1 parent 2900e03 commit 0d404d9

File tree

3 files changed

+133
-8
lines changed

3 files changed

+133
-8
lines changed

x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/80_connector_update_last_sync_stats.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,33 @@ setup:
4848
- match: { last_sync_error: "oh no error" }
4949
- match: { last_access_control_sync_scheduled_at: "2023-05-25T12:30:00.000Z" }
5050

51+
---
52+
"Update Connector Last Sync Stats - Supports different partial updates":
53+
- do:
54+
connector.last_sync:
55+
connector_id: test-connector
56+
body:
57+
last_deleted_document_count: 43
58+
59+
- match: { result: updated }
60+
61+
- do:
62+
connector.last_sync:
63+
connector_id: test-connector
64+
body:
65+
last_indexed_document_count: 42
66+
67+
- match: { result: updated }
68+
69+
70+
- do:
71+
connector.get:
72+
connector_id: test-connector
73+
74+
- match: { last_deleted_document_count: 43 }
75+
- match: { last_indexed_document_count: 42 }
76+
77+
5178
---
5279
"Update Connector Last Sync Stats - Connector doesn't exist":
5380
- do:

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

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,22 +101,78 @@ public ConnectorSyncInfo(StreamInput in) throws IOException {
101101
public static final ParseField LAST_SYNC_STATUS_FIELD = new ParseField("last_sync_status");
102102
public static final ParseField LAST_SYNCED_FIELD = new ParseField("last_synced");
103103

104+
public String getLastAccessControlSyncError() {
105+
return lastAccessControlSyncError;
106+
}
107+
108+
public Instant getLastAccessControlSyncScheduledAt() {
109+
return lastAccessControlSyncScheduledAt;
110+
}
111+
112+
public ConnectorSyncStatus getLastAccessControlSyncStatus() {
113+
return lastAccessControlSyncStatus;
114+
}
115+
116+
public Long getLastDeletedDocumentCount() {
117+
return lastDeletedDocumentCount;
118+
}
119+
120+
public Instant getLastIncrementalSyncScheduledAt() {
121+
return lastIncrementalSyncScheduledAt;
122+
}
123+
124+
public Long getLastIndexedDocumentCount() {
125+
return lastIndexedDocumentCount;
126+
}
127+
128+
public String getLastSyncError() {
129+
return lastSyncError;
130+
}
131+
132+
public Instant getLastSyncScheduledAt() {
133+
return lastSyncScheduledAt;
134+
}
135+
136+
public ConnectorSyncStatus getLastSyncStatus() {
137+
return lastSyncStatus;
138+
}
139+
140+
public Instant getLastSynced() {
141+
return lastSynced;
142+
}
143+
104144
@Override
105145
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
106-
builder.field(LAST_ACCESS_CONTROL_SYNC_ERROR.getPreferredName(), lastAccessControlSyncError);
107-
builder.field(LAST_ACCESS_CONTROL_SYNC_STATUS_FIELD.getPreferredName(), lastAccessControlSyncStatus);
108-
builder.field(LAST_ACCESS_CONTROL_SYNC_SCHEDULED_AT_FIELD.getPreferredName(), lastAccessControlSyncScheduledAt);
146+
if (lastAccessControlSyncError != null) {
147+
builder.field(LAST_ACCESS_CONTROL_SYNC_ERROR.getPreferredName(), lastAccessControlSyncError);
148+
}
149+
if (lastAccessControlSyncStatus != null) {
150+
builder.field(LAST_ACCESS_CONTROL_SYNC_STATUS_FIELD.getPreferredName(), lastAccessControlSyncStatus);
151+
}
152+
if (lastAccessControlSyncScheduledAt != null) {
153+
builder.field(LAST_ACCESS_CONTROL_SYNC_SCHEDULED_AT_FIELD.getPreferredName(), lastAccessControlSyncScheduledAt);
154+
}
109155
if (lastDeletedDocumentCount != null) {
110156
builder.field(LAST_DELETED_DOCUMENT_COUNT_FIELD.getPreferredName(), lastDeletedDocumentCount);
111157
}
112-
builder.field(LAST_INCREMENTAL_SYNC_SCHEDULED_AT_FIELD.getPreferredName(), lastIncrementalSyncScheduledAt);
158+
if (lastIncrementalSyncScheduledAt != null) {
159+
builder.field(LAST_INCREMENTAL_SYNC_SCHEDULED_AT_FIELD.getPreferredName(), lastIncrementalSyncScheduledAt);
160+
}
113161
if (lastIndexedDocumentCount != null) {
114162
builder.field(LAST_INDEXED_DOCUMENT_COUNT_FIELD.getPreferredName(), lastIndexedDocumentCount);
115163
}
116-
builder.field(LAST_SYNC_ERROR_FIELD.getPreferredName(), lastSyncError);
117-
builder.field(LAST_SYNC_SCHEDULED_AT_FIELD.getPreferredName(), lastSyncScheduledAt);
118-
builder.field(LAST_SYNC_STATUS_FIELD.getPreferredName(), lastSyncStatus);
119-
builder.field(LAST_SYNCED_FIELD.getPreferredName(), lastSynced);
164+
if (lastSyncError != null) {
165+
builder.field(LAST_SYNC_ERROR_FIELD.getPreferredName(), lastSyncError);
166+
}
167+
if (lastSyncScheduledAt != null) {
168+
builder.field(LAST_SYNC_SCHEDULED_AT_FIELD.getPreferredName(), lastSyncScheduledAt);
169+
}
170+
if (lastSyncStatus != null) {
171+
builder.field(LAST_SYNC_STATUS_FIELD.getPreferredName(), lastSyncStatus);
172+
}
173+
if (lastSynced != null) {
174+
builder.field(LAST_SYNCED_FIELD.getPreferredName(), lastSynced);
175+
}
120176
return builder;
121177
}
122178

x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/ConnectorIndexServiceTests.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,48 @@ public void testUpdateConnectorLastSyncStats() throws Exception {
474474
assertThat(syncStats, equalTo(indexedConnector.getSyncInfo()));
475475
}
476476

477+
public void testUpdateConnectorLastSyncStats_withPartialUpdate() throws Exception {
478+
Connector connector = ConnectorTestUtils.getRandomConnector();
479+
String connectorId = randomUUID();
480+
481+
ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector);
482+
assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK)));
483+
484+
ConnectorSyncInfo syncStats = new ConnectorSyncInfo.Builder().setLastSyncError(randomAlphaOfLengthBetween(5, 10))
485+
.setLastIndexedDocumentCount(randomLong())
486+
.setLastDeletedDocumentCount(randomLong())
487+
.build();
488+
489+
UpdateConnectorLastSyncStatsAction.Request lastSyncStats = new UpdateConnectorLastSyncStatsAction.Request(connectorId, syncStats);
490+
491+
DocWriteResponse updateResponse = awaitUpdateConnectorLastSyncStats(lastSyncStats);
492+
assertThat(updateResponse.status(), equalTo(RestStatus.OK));
493+
494+
Connector indexedConnector = awaitGetConnector(connectorId);
495+
496+
// Check fields from the partial update of last sync stats
497+
assertThat(syncStats.getLastSyncError(), equalTo(indexedConnector.getSyncInfo().getLastSyncError()));
498+
assertThat(syncStats.getLastDeletedDocumentCount(), equalTo(indexedConnector.getSyncInfo().getLastDeletedDocumentCount()));
499+
assertThat(syncStats.getLastIndexedDocumentCount(), equalTo(indexedConnector.getSyncInfo().getLastIndexedDocumentCount()));
500+
501+
ConnectorSyncInfo nextSyncStats = new ConnectorSyncInfo.Builder().setLastIndexedDocumentCount(randomLong()).build();
502+
503+
lastSyncStats = new UpdateConnectorLastSyncStatsAction.Request(connectorId, nextSyncStats);
504+
505+
updateResponse = awaitUpdateConnectorLastSyncStats(lastSyncStats);
506+
assertThat(updateResponse.status(), equalTo(RestStatus.OK));
507+
508+
indexedConnector = awaitGetConnector(connectorId);
509+
510+
// Check fields from the partial update of last sync stats
511+
assertThat(nextSyncStats.getLastIndexedDocumentCount(), equalTo(indexedConnector.getSyncInfo().getLastIndexedDocumentCount()));
512+
513+
// Check that other fields remained unchanged
514+
assertThat(syncStats.getLastSyncError(), equalTo(indexedConnector.getSyncInfo().getLastSyncError()));
515+
assertThat(syncStats.getLastDeletedDocumentCount(), equalTo(indexedConnector.getSyncInfo().getLastDeletedDocumentCount()));
516+
517+
}
518+
477519
public void testUpdateConnectorScheduling() throws Exception {
478520
Connector connector = ConnectorTestUtils.getRandomConnector();
479521
String connectorId = randomUUID();

0 commit comments

Comments
 (0)