Skip to content

Commit ebc2610

Browse files
authored
[CCR] Open index after unfollowing leader (#29887)
* Open index after unfollowing leader, fix some variable names * Fix typo * Add comment
1 parent fad4473 commit ebc2610

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

x-pack/plugins/cross_cluster_replication/public/app/store/actions/follower_index.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,9 @@ export const pauseFollowerIndex = (id) => (
110110
}
111111

112112
if (response.itemsPaused.length) {
113-
const hasMultipleDelete = response.itemsPaused.length > 1;
113+
const hasMultiplePaused = response.itemsPaused.length > 1;
114114

115-
const successMessage = hasMultipleDelete
115+
const successMessage = hasMultiplePaused
116116
? i18n.translate('xpack.crossClusterReplication.followerIndex.pauseAction.successMultipleNotificationTitle', {
117117
defaultMessage: `{count} follower indices were paused`,
118118
values: { count: response.itemsPaused.length },
@@ -160,9 +160,9 @@ export const resumeFollowerIndex = (id) => (
160160
}
161161

162162
if (response.itemsResumed.length) {
163-
const hasMultipleDelete = response.itemsResumed.length > 1;
163+
const hasMultipleResumed = response.itemsResumed.length > 1;
164164

165-
const successMessage = hasMultipleDelete
165+
const successMessage = hasMultipleResumed
166166
? i18n.translate('xpack.crossClusterReplication.followerIndex.resumeAction.successMultipleNotificationTitle', {
167167
defaultMessage: `{count} follower indices were resumed`,
168168
values: { count: response.itemsResumed.length },
@@ -210,9 +210,9 @@ export const unfollowLeaderIndex = (id) => (
210210
}
211211

212212
if (response.itemsUnfollowed.length) {
213-
const hasMultipleDelete = response.itemsUnfollowed.length > 1;
213+
const hasMultipleUnfollow = response.itemsUnfollowed.length > 1;
214214

215-
const successMessage = hasMultipleDelete
215+
const successMessage = hasMultipleUnfollow
216216
? i18n.translate('xpack.crossClusterReplication.followerIndex.unfollowAction.successMultipleNotificationTitle', {
217217
defaultMessage: `Leader indices of {count} follower indices were unfollowed`,
218218
values: { count: response.itemsUnfollowed.length },
@@ -225,6 +225,22 @@ export const unfollowLeaderIndex = (id) => (
225225
toastNotifications.addSuccess(successMessage);
226226
}
227227

228+
if (response.itemsNotOpen.length) {
229+
const hasMultipleNotOpen = response.itemsNotOpen.length > 1;
230+
231+
const warningMessage = hasMultipleNotOpen
232+
? i18n.translate('xpack.crossClusterReplication.followerIndex.unfollowAction.notOpenWarningMultipleNotificationTitle', {
233+
defaultMessage: `{count} indices could not be re-opened`,
234+
values: { count: response.itemsNotOpen.length },
235+
})
236+
: i18n.translate('xpack.crossClusterReplication.followerIndex.unfollowAction.notOpenWarningSingleNotificationTitle', {
237+
defaultMessage: `Index '{name}' could not be re-opened`,
238+
values: { name: response.itemsNotOpen[0] },
239+
});
240+
241+
toastNotifications.addWarning(warningMessage);
242+
}
243+
228244
// If we've just unfollowed a follower index we were looking at, we need to close the panel.
229245
const followerIndexId = getSelectedFollowerIndexId('detail')(getState());
230246
if (response.itemsUnfollowed.includes(followerIndexId)) {

x-pack/plugins/cross_cluster_replication/server/routes/api/follower_index.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ export const registerFollowerIndexRoutes = (server) => {
257257
const ids = id.split(',');
258258

259259
const itemsUnfollowed = [];
260+
const itemsNotOpen = [];
260261
const errors = [];
261262

262263
await Promise.all(ids.map(async (_id) => {
@@ -274,6 +275,14 @@ export const registerFollowerIndexRoutes = (server) => {
274275
// Unfollow leader
275276
await callWithRequest('ccr.unfollowLeaderIndex', { id: _id });
276277

278+
// Try to re-open the index, store failures in a separate array to surface warnings in the UI
279+
// This will allow users to query their index normally after unfollowing
280+
try {
281+
await callWithRequest('indices.open', { index: _id });
282+
} catch (e) {
283+
itemsNotOpen.push(_id);
284+
}
285+
277286
// Push success
278287
itemsUnfollowed.push(_id);
279288
} catch (err) {
@@ -287,6 +296,7 @@ export const registerFollowerIndexRoutes = (server) => {
287296

288297
return {
289298
itemsUnfollowed,
299+
itemsNotOpen,
290300
errors
291301
};
292302
},

x-pack/plugins/cross_cluster_replication/server/routes/api/follower_index.test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ describe('[CCR API Routes] Follower Index', () => {
247247
setHttpRequestResponse(null, { acknowledge: true });
248248
setHttpRequestResponse(null, { acknowledge: true });
249249
setHttpRequestResponse(null, { acknowledge: true });
250+
setHttpRequestResponse(null, { acknowledge: true });
250251

251252
const response = await routeHandler({ params: { id: '1' } });
252253

@@ -264,6 +265,9 @@ describe('[CCR API Routes] Follower Index', () => {
264265
setHttpRequestResponse(null, { acknowledge: true });
265266
setHttpRequestResponse(null, { acknowledge: true });
266267
setHttpRequestResponse(null, { acknowledge: true });
268+
setHttpRequestResponse(null, { acknowledge: true });
269+
setHttpRequestResponse(null, { acknowledge: true });
270+
setHttpRequestResponse(null, { acknowledge: true });
267271

268272
const response = await routeHandler({ params: { id: '1,2,3' } });
269273

0 commit comments

Comments
 (0)