[ 
https://issues.apache.org/jira/browse/IGNITE-14070?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Pavel Pereslegin updated IGNITE-14070:
--------------------------------------
    Description: 
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}


  was:
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}



> 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
>             Fix For: 2.12
>
>          Time Spent: 20m
>  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.3.4#803005)

Reply via email to