[
https://issues.apache.org/jira/browse/IGNITE-14070?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dmitry Pavlov updated IGNITE-14070:
-----------------------------------
Labels: iep-43 ise (was: iep-43)
> Implement API for custom snapshot lifecycle handlers (extensions).
> ------------------------------------------------------------------
>
> Key: IGNITE-14070
> URL: https://issues.apache.org/jira/browse/IGNITE-14070
> Project: Ignite
> Issue Type: New Feature
> Reporter: Denis Garus
> Assignee: Pavel Pereslegin
> Priority: Major
> Labels: iep-43, ise
> Fix For: 2.12
>
> Time Spent: 50m
> Remaining Estimate: 0h
>
> Sometimes the user is faced with the task of adding post-processing to the
> snapshot operation, for example, calculating the checksum of files, checking
> the consistency, etc. The same applies to the automatic restore procedure -
> the user should be able to check the consistency of files, checksums, etc.
> before restore them. It is impossible to implement pre/post-processing using
> standard Ignite events. if a custom check detects a problem, the entire
> operation with the snapshot must be aborted.
> We need to provide the ability to extend snapshot operations (CREATE/RESTORE)
> using plugin extensions.
> The API proposal:
> {code:java}
> /** handler */
> public interface SnapshotHandler<T> extends Extension {
> /** Snapshot handler type. */
> public SnapshotHandlerType type();
> /** Local processing of a snapshot operation. */
> public @Nullable T invoke(SnapshotHandlerContext ctx) throws Exception;
> /** Processing of results from all nodes. */
> public default void complete(String name,
> Collection<SnapshotHandlerResult<T>> results) throws Exception {
> for (SnapshotHandlerResult<T> res : results) {
> if (res.error() == null)
> continue;;
> throw new IgniteCheckedException("Snapshot handler has failed " +
> "[snapshot=" + name +
> ", handler=" + getClass().getName() +
> ", nodeId=" + res.node().id() + "].", res.error());
> }
> }
> }
> /** type */
> public enum SnapshotHandlerType {
> /** Handler is called immediately after the snapshot is taken. */
> CREATE,
> /** Handler is called just before restore operation is started. */
> RESTORE
> }
> /** context */
> public class SnapshotHandlerContext {
> SnapshotMetadata metadata;
> Collection<String> grps;
> ClusterNode locNode;
> }
> /** Result of local processing on the node. In addition to the result
> received from the handler, it also includes information about the error (if
> any) and the node on which this result was received. */
> public class SnapshotHandlerResult<T> implements Serializable {
> T data;
> Exception err;
> ClusterNode node;
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)