go_study/fabric-main/internal/peer/snapshot/listpending.go

85 lines
1.9 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"
)
// listPendingCmd returns the cobra command for snapshot listpending command
func listPendingCmd(cl *client, cryptoProvider bccsp.BCCSP) *cobra.Command {
snapshotGenerateRequestCmd := &cobra.Command{
Use: "listpending",
Short: "List pending requests for snapshots.",
Long: "List pending requests for snapshots.",
RunE: func(cmd *cobra.Command, args []string) error {
return listPending(cmd, cl, cryptoProvider)
},
}
flagList := []string{
"channelID",
"peerAddress",
"tlsRootCertFile",
}
attachFlags(snapshotGenerateRequestCmd, flagList)
return snapshotGenerateRequestCmd
}
func listPending(cmd *cobra.Command, cl *client, cryptoProvider bccsp.BCCSP) error {
if err := validateListPending(); 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
}
query := &pb.SnapshotQuery{
SignatureHeader: signatureHdr,
ChannelId: channelID,
}
signedRequest, err := signSnapshotRequest(cl.signer, query)
if err != nil {
return err
}
resp, err := cl.snapshotClient.QueryPendings(context.Background(), signedRequest)
if err != nil {
return errors.WithMessage(err, "failed to list pending requests")
}
fmt.Fprintf(cl.writer, "Successfully got pending snapshot requests: %v\n", resp.BlockNumbers)
return nil
}
func validateListPending() error {
if channelID == "" {
return errors.New("the required parameter 'channelID' is empty. Rerun the command with -c flag")
}
return nil
}