Skip to content

Commit 5288f3e

Browse files
author
Sachin Kale
committed
Use RestoreClusterStateListener with generic type that extends ActionResponse
Signed-off-by: Sachin Kale <kalsac@amazon.com>
1 parent dc13f01 commit 5288f3e

File tree

4 files changed

+32
-105
lines changed

4 files changed

+32
-105
lines changed

server/src/main/java/org/opensearch/action/admin/cluster/remotestore/restore/RemoteStoreRestoreClusterStateListener.java

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

server/src/main/java/org/opensearch/action/admin/cluster/remotestore/restore/TransportRestoreRemoteStoreAction.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
package org.opensearch.action.admin.cluster.remotestore.restore;
1010

1111
import org.opensearch.action.ActionListener;
12+
import org.opensearch.action.admin.cluster.snapshots.restore.RestoreClusterStateListener;
1213
import org.opensearch.action.support.ActionFilters;
1314
import org.opensearch.action.support.clustermanager.TransportClusterManagerNodeAction;
1415
import org.opensearch.cluster.ClusterState;
@@ -78,7 +79,7 @@ protected ClusterBlockException checkBlock(RestoreRemoteStoreRequest request, Cl
7879
}
7980

8081
@Override
81-
protected void masterOperation(
82+
protected void clusterManagerOperation(
8283
final RestoreRemoteStoreRequest request,
8384
final ClusterState state,
8485
final ActionListener<RestoreRemoteStoreResponse> listener
@@ -87,10 +88,11 @@ protected void masterOperation(
8788
request,
8889
ActionListener.delegateFailure(listener, (delegatedListener, restoreCompletionResponse) -> {
8990
if (restoreCompletionResponse.getRestoreInfo() == null && request.waitForCompletion()) {
90-
RemoteStoreRestoreClusterStateListener.createAndRegisterListener(
91+
RestoreClusterStateListener.createAndRegisterListener(
9192
clusterService,
9293
restoreCompletionResponse,
93-
delegatedListener
94+
delegatedListener,
95+
RestoreRemoteStoreResponse::new
9496
);
9597
} else {
9698
delegatedListener.onResponse(new RestoreRemoteStoreResponse(restoreCompletionResponse.getRestoreInfo()));

server/src/main/java/org/opensearch/action/admin/cluster/snapshots/restore/RestoreClusterStateListener.java

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.logging.log4j.LogManager;
3636
import org.apache.logging.log4j.Logger;
3737
import org.opensearch.action.ActionListener;
38+
import org.opensearch.action.ActionResponse;
3839
import org.opensearch.cluster.ClusterChangedEvent;
3940
import org.opensearch.cluster.ClusterStateListener;
4041
import org.opensearch.cluster.RestoreInProgress;
@@ -44,29 +45,36 @@
4445
import org.opensearch.snapshots.RestoreInfo;
4546
import org.opensearch.snapshots.RestoreService;
4647

48+
import java.util.function.Function;
49+
4750
import static org.opensearch.snapshots.RestoreService.restoreInProgress;
4851

4952
/**
5053
* Transport listener for cluster state updates
5154
*
5255
* @opensearch.internal
5356
*/
54-
public class RestoreClusterStateListener implements ClusterStateListener {
57+
public class RestoreClusterStateListener<T extends ActionResponse> implements ClusterStateListener {
5558

5659
private static final Logger logger = LogManager.getLogger(RestoreClusterStateListener.class);
5760

5861
private final ClusterService clusterService;
5962
private final String uuid;
60-
private final ActionListener<RestoreSnapshotResponse> listener;
63+
private final String restoreIdentifier;
64+
private final ActionListener<T> listener;
65+
private final Function<RestoreInfo, T> actionResponseFactory;
6166

6267
private RestoreClusterStateListener(
6368
ClusterService clusterService,
6469
RestoreService.RestoreCompletionResponse response,
65-
ActionListener<RestoreSnapshotResponse> listener
70+
ActionListener<T> listener,
71+
Function<RestoreInfo, T> actionResponseFactory
6672
) {
6773
this.clusterService = clusterService;
6874
this.uuid = response.getUuid();
75+
this.restoreIdentifier = response.getSnapshot() != null ? response.getSnapshot().getSnapshotId().getName() : "remote_store";
6976
this.listener = listener;
77+
this.actionResponseFactory = actionResponseFactory;
7078
}
7179

7280
@Override
@@ -78,35 +86,36 @@ public void clusterChanged(ClusterChangedEvent changedEvent) {
7886
// on the current cluster-manager and as such it might miss some intermediary cluster states due to batching.
7987
// Clean up listener in that case and acknowledge completion of restore operation to client.
8088
clusterService.removeListener(this);
81-
listener.onResponse(new RestoreSnapshotResponse((RestoreInfo) null));
89+
listener.onResponse(actionResponseFactory.apply(null));
8290
} else if (newEntry == null) {
8391
clusterService.removeListener(this);
8492
ImmutableOpenMap<ShardId, RestoreInProgress.ShardRestoreStatus> shards = prevEntry.shards();
85-
assert prevEntry.state().completed() : "expected completed snapshot state but was " + prevEntry.state();
93+
assert prevEntry.state().completed() : "expected completed snapshot/remote store restore state but was " + prevEntry.state();
8694
assert RestoreService.completed(shards) : "expected all restore entries to be completed";
8795
RestoreInfo ri = new RestoreInfo(
88-
prevEntry.snapshot().getSnapshotId().getName(),
96+
restoreIdentifier,
8997
prevEntry.indices(),
9098
shards.size(),
9199
shards.size() - RestoreService.failedShards(shards)
92100
);
93-
RestoreSnapshotResponse response = new RestoreSnapshotResponse(ri);
94-
logger.debug("restore of [{}] completed", prevEntry.snapshot().getSnapshotId());
101+
T response = actionResponseFactory.apply(ri);
102+
logger.debug("restore of [{}] completed", restoreIdentifier);
95103
listener.onResponse(response);
96104
} else {
97-
// restore not completed yet, wait for next cluster state update
105+
logger.debug("restore not completed yet, wait for next cluster state update");
98106
}
99107
}
100108

101109
/**
102110
* Creates a cluster state listener and registers it with the cluster service. The listener passed as a
103111
* parameter will be called when the restore is complete.
104112
*/
105-
public static void createAndRegisterListener(
113+
public static <T extends ActionResponse> void createAndRegisterListener(
106114
ClusterService clusterService,
107115
RestoreService.RestoreCompletionResponse response,
108-
ActionListener<RestoreSnapshotResponse> listener
116+
ActionListener<T> listener,
117+
Function<RestoreInfo, T> actionResponseFactory
109118
) {
110-
clusterService.addListener(new RestoreClusterStateListener(clusterService, response, listener));
119+
clusterService.addListener(new RestoreClusterStateListener<T>(clusterService, response, listener, actionResponseFactory));
111120
}
112121
}

server/src/main/java/org/opensearch/action/admin/cluster/snapshots/restore/TransportRestoreSnapshotAction.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,12 @@ protected void clusterManagerOperation(
109109
) {
110110
restoreService.restoreSnapshot(request, ActionListener.delegateFailure(listener, (delegatedListener, restoreCompletionResponse) -> {
111111
if (restoreCompletionResponse.getRestoreInfo() == null && request.waitForCompletion()) {
112-
RestoreClusterStateListener.createAndRegisterListener(clusterService, restoreCompletionResponse, delegatedListener);
112+
RestoreClusterStateListener.createAndRegisterListener(
113+
clusterService,
114+
restoreCompletionResponse,
115+
delegatedListener,
116+
RestoreSnapshotResponse::new
117+
);
113118
} else {
114119
delegatedListener.onResponse(new RestoreSnapshotResponse(restoreCompletionResponse.getRestoreInfo()));
115120
}

0 commit comments

Comments
 (0)