91 lines
2.1 KiB
Go
91 lines
2.1 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package snapshot
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
pb "github.com/hyperledger/fabric-protos-go/peer"
|
|
"github.com/hyperledger/fabric/bccsp"
|
|
"github.com/pkg/errors"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// cancelRequestCmd returns the cobra command for snapshot cancelrequest command
|
|
func cancelRequestCmd(cl *client, cryptoProvider bccsp.BCCSP) *cobra.Command {
|
|
snapshotCancelRequestCmd := &cobra.Command{
|
|
Use: "cancelrequest",
|
|
Short: "Cancel a request for a snapshot at the specified block.",
|
|
Long: "Cancel a request for a snapshot at the specified block.",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
return cancelRequest(cmd, cl, cryptoProvider)
|
|
},
|
|
}
|
|
|
|
flagList := []string{
|
|
"channelID",
|
|
"blockNumber",
|
|
"peerAddress",
|
|
"tlsRootCertFile",
|
|
}
|
|
attachFlags(snapshotCancelRequestCmd, flagList)
|
|
|
|
return snapshotCancelRequestCmd
|
|
}
|
|
|
|
func cancelRequest(cmd *cobra.Command, cl *client, cryptoProvider bccsp.BCCSP) error {
|
|
if err := validateCancelRequest(); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Parsing of the command line is done so silence cmd usage
|
|
cmd.SilenceUsage = true
|
|
|
|
// create a client if not provided
|
|
if cl == nil {
|
|
var err error
|
|
cl, err = newClient(cryptoProvider)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
signatureHdr, err := createSignatureHeader(cl.signer)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
request := &pb.SnapshotRequest{
|
|
SignatureHeader: signatureHdr,
|
|
ChannelId: channelID,
|
|
BlockNumber: blockNumber,
|
|
}
|
|
signedRequest, err := signSnapshotRequest(cl.signer, request)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = cl.snapshotClient.Cancel(context.Background(), signedRequest)
|
|
if err != nil {
|
|
return errors.WithMessage(err, "failed to cancel the request")
|
|
}
|
|
|
|
fmt.Fprint(cl.writer, "Snapshot request cancelled successfully\n")
|
|
return nil
|
|
}
|
|
|
|
func validateCancelRequest() error {
|
|
if channelID == "" {
|
|
return errors.New("the required parameter 'channelID' is empty. Rerun the command with -c flag")
|
|
}
|
|
if blockNumber == 0 {
|
|
return errors.New("the required parameter 'blockNumber' is empty or set to 0. Rerun the command with -b flag")
|
|
}
|
|
return nil
|
|
}
|