63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package node
|
|
|
|
import (
|
|
"path/filepath"
|
|
|
|
coreconfig "github.com/hyperledger/fabric/core/config"
|
|
"github.com/hyperledger/fabric/core/ledger/kvledger"
|
|
"github.com/hyperledger/fabric/core/transientstore"
|
|
"github.com/hyperledger/fabric/internal/peer/common"
|
|
"github.com/pkg/errors"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func unjoinCmd() *cobra.Command {
|
|
var channelID string
|
|
|
|
cmd := &cobra.Command{
|
|
Use: "unjoin",
|
|
Short: "Unjoin the peer from a channel.",
|
|
Long: "Unjoin the peer from a channel. When the command is executed, the peer must be offline.",
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
if channelID == common.UndefinedParamValue {
|
|
return errors.New("Must supply channel ID")
|
|
}
|
|
|
|
if err := unjoinChannel(channelID); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
},
|
|
}
|
|
flags := cmd.Flags()
|
|
flags.StringVarP(&channelID, "channelID", "c", common.UndefinedParamValue, "Channel to unjoin.")
|
|
|
|
return cmd
|
|
}
|
|
|
|
// unjoin the peer from a channel.
|
|
func unjoinChannel(channelID string) error {
|
|
// transient storage must be scrubbed prior to removing the kvledger for the channel. Once the
|
|
// kvledger storage has been removed, a subsequent ledger removal will return a "no such ledger" error.
|
|
// By removing the transient storage prior to deleting the ledger, a crash may be recovered by re-running
|
|
// the peer unjoin.
|
|
transientStoragePath := filepath.Join(coreconfig.GetPath("peer.fileSystemPath"), "transientstore")
|
|
if err := transientstore.Drop(transientStoragePath, channelID); err != nil {
|
|
return err
|
|
}
|
|
|
|
config := ledgerConfig()
|
|
if err := kvledger.UnjoinChannel(config, channelID); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|