|
|
@ -4,7 +4,6 @@ import ( |
|
|
|
"context" |
|
|
|
"flag" |
|
|
|
"fmt" |
|
|
|
"github.com/seaweedfs/seaweedfs/weed/glog" |
|
|
|
"github.com/seaweedfs/seaweedfs/weed/pb" |
|
|
|
"github.com/seaweedfs/seaweedfs/weed/storage/types" |
|
|
|
"io" |
|
|
@ -39,14 +38,12 @@ func (c *commandEcDecode) Help() string { |
|
|
|
} |
|
|
|
|
|
|
|
func (c *commandEcDecode) Do(args []string, commandEnv *CommandEnv, writer io.Writer) (err error) { |
|
|
|
encodeCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError) |
|
|
|
volumeId := encodeCommand.Int("volumeId", 0, "the volume id") |
|
|
|
collection := encodeCommand.String("collection", "", "the collection name") |
|
|
|
forceChanges := encodeCommand.Bool("force", false, "force the encoding even if the cluster has less than recommended 4 nodes") |
|
|
|
if err = encodeCommand.Parse(args); err != nil { |
|
|
|
decodeCommand := flag.NewFlagSet(c.Name(), flag.ContinueOnError) |
|
|
|
volumeId := decodeCommand.Int("volumeId", 0, "the volume id") |
|
|
|
collection := decodeCommand.String("collection", "", "the collection name") |
|
|
|
if err = decodeCommand.Parse(args); err != nil { |
|
|
|
return nil |
|
|
|
} |
|
|
|
infoAboutSimulationMode(writer, *forceChanges, "-force") |
|
|
|
|
|
|
|
if err = commandEnv.confirmIsLocked(args); err != nil { |
|
|
|
return |
|
|
@ -60,17 +57,6 @@ func (c *commandEcDecode) Do(args []string, commandEnv *CommandEnv, writer io.Wr |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|
if !*forceChanges { |
|
|
|
var nodeCount int |
|
|
|
eachDataNode(topologyInfo, func(dc string, rack RackId, dn *master_pb.DataNodeInfo) { |
|
|
|
nodeCount++ |
|
|
|
}) |
|
|
|
if nodeCount < erasure_coding.ParityShardsCount { |
|
|
|
glog.V(0).Infof("skip erasure coding with %d nodes, less than recommended %d nodes", nodeCount, erasure_coding.ParityShardsCount) |
|
|
|
return nil |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// volumeId is provided
|
|
|
|
if vid != 0 { |
|
|
|
return doEcDecode(commandEnv, topologyInfo, *collection, vid) |
|
|
|