// GetIndex searches the kv list for 'key' and returns its index if found. func (s SystemConfig) GetIndex(key roachpb.Key) (int, bool) { l := len(s.Values) index := sort.Search(l, func(i int) bool { return bytes.Compare(s.Values[i].Key, key) >= 0 }) if index == l || !key.Equal(s.Values[index].Key) { return 0, false } return index, true }
// PrettyPrint prints the key in a human readable format: // // Key's Format Key's Value // /Local/... "\x01"+... // /Store/... "\x01s"+... // /RangeID/... "\x01s"+[rangeid] // /[rangeid]/AbortCache/[id] "\x01s"+[rangeid]+"abc-"+[id] // /[rangeid]/Lease "\x01s"+[rangeid]+"rfll" // /[rangeid]/RaftTombstone "\x01s"+[rangeid]+"rftb" // /[rangeid]/RaftHardState "\x01s"+[rangeid]+"rfth" // /[rangeid]/RaftAppliedIndex "\x01s"+[rangeid]+"rfta" // /[rangeid]/RaftLog/logIndex:[logIndex] "\x01s"+[rangeid]+"rftl"+[logIndex] // /[rangeid]/RaftTruncatedState "\x01s"+[rangeid]+"rftt" // /[rangeid]/RaftLastIndex "\x01s"+[rangeid]+"rfti" // /[rangeid]/RangeLastReplicaGCTimestamp "\x01s"+[rangeid]+"rlrt" // /[rangeid]/RangeLastVerificationTimestamp "\x01s"+[rangeid]+"rlvt" // /[rangeid]/RangeStats "\x01s"+[rangeid]+"stat" // /Range/... "\x01k"+... // /RangeDescriptor/[key] "\x01k"+[key]+"rdsc" // /Transaction/addrKey:[key]/id:[id] "\x01k"+[key]+"txn-"+[id] // /Local/Max "\x02" // // /Meta1/[key] "\x02"+[key] // /Meta2/[key] "\x03"+[key] // /System/... "\x04" // /NodeLiveness/[key] "\x04\0x00liveness-"+[key] // /StatusNode/[key] "\x04status-node-"+[key] // /System/Max "\x05" // // /Table/[key] [key] // // /Min "" // /Max "\xff\xff" func PrettyPrint(key roachpb.Key) string { for _, k := range constKeyDict { if key.Equal(k.value) { return k.name } } for _, k := range keyOfKeyDict { if bytes.HasPrefix(key, k.prefix) { key = key[len(k.prefix):] str, formatted := prettyPrintInternal(key) if formatted { return k.name + str } return k.name + "/" + str } } str, _ := prettyPrintInternal(key) return str }