func runDebugKeys(cmd *cobra.Command, args []string) error { stopper := stop.NewStopper() defer stopper.Stop() if len(args) != 1 { return errors.New("one argument is required") } db, err := openStore(cmd, args[0], stopper) if err != nil { return err } d := cliContext.debug from := engine.NilKey to := engine.MVCCKeyMax if d.raw { if len(d.startKey) > 0 { from = engine.MakeMVCCMetadataKey(roachpb.Key(d.startKey)) } if len(d.endKey) > 0 { to = engine.MakeMVCCMetadataKey(roachpb.Key(d.endKey)) } } else { if len(d.startKey) > 0 { startKey, err := keys.UglyPrint(d.startKey) if err != nil { return err } from = engine.MakeMVCCMetadataKey(startKey) } if len(d.endKey) > 0 { endKey, err := keys.UglyPrint(d.endKey) if err != nil { return err } to = engine.MakeMVCCMetadataKey(endKey) } } printer := printKey if d.values { printer = printKeyValue } if err := db.Iterate(from, to, printer); err != nil { return err } return nil }
func (k *mvccKey) Set(value string) error { var typ keyType var keyStr string i := strings.IndexByte(value, ':') if i == -1 { keyStr = value } else { var err error typ, err = parseKeyType(value[:i]) if err != nil { return err } keyStr = value[i+1:] } switch typ { case raw: *k = mvccKey(engine.MakeMVCCMetadataKey(roachpb.Key(keyStr))) case human: key, err := keys.UglyPrint(keyStr) if err != nil { return err } *k = mvccKey(engine.MakeMVCCMetadataKey(key)) case rangeID: fromID, err := parseRangeID(keyStr) if err != nil { return err } *k = mvccKey(engine.MakeMVCCMetadataKey(keys.MakeRangeIDPrefix(fromID))) default: return fmt.Errorf("unknown key type %s", typ) } return nil }