// ValueProto parses the byte slice value into msg. func (kv *KeyValue) ValueProto(msg proto.Message) error { if kv.Value == nil { msg.Reset() return nil } return kv.Value.GetProto(msg) }
func dbGetProto(rdb *C.DBEngine, key MVCCKey, msg proto.Message) (ok bool, keyBytes, valBytes int64, err error) { if len(key.Key) == 0 { err = emptyKeyError() return } var result C.DBString if err = statusToError(C.DBGet(rdb, goToCKey(key), &result)); err != nil { return } if result.len <= 0 { msg.Reset() return } ok = true if msg != nil { // Make a byte slice that is backed by result.data. This slice // cannot live past the lifetime of this method, but we're only // using it to unmarshal the roachpb. data := cSliceToUnsafeGoBytes(C.DBSlice(result)) err = proto.Unmarshal(data, msg) } C.free(unsafe.Pointer(result.data)) keyBytes = int64(key.EncodedSize()) valBytes = int64(result.len) return }
// ValueProto parses the byte slice value as a proto message. func (kv *KeyValue) ValueProto(msg gogoproto.Message) error { if kv.Value == nil || kv.Value.Bytes == nil { msg.Reset() return nil } return gogoproto.Unmarshal(kv.Value.Bytes, msg) }
func (r *RocksDB) getProtoInternal(key proto.EncodedKey, msg gogoproto.Message, snapshotHandle *C.DBSnapshot) (ok bool, keyBytes, valBytes int64, err error) { if len(key) == 0 { err = emptyKeyError() return } var result C.DBString if err = statusToError(C.DBGet(r.rdb, snapshotHandle, goToCSlice(key), &result)); err != nil { return } if result.len <= 0 { msg.Reset() return } ok = true if msg != nil { // Make a byte slice that is backed by result.data. This slice // cannot live past the lifetime of this method, but we're only // using it to unmarshal the proto. data := cSliceToUnsafeGoBytes(C.DBSlice(result)) err = gogoproto.Unmarshal(data, msg) } C.free(unsafe.Pointer(result.data)) keyBytes = int64(len(key)) valBytes = int64(result.len) return }
// ValueProto parses the byte slice value as a proto message. func (kv *KeyValue) ValueProto(msg proto.Message) error { if kv.Value == nil || kv.Value.GetRawBytes() == nil { msg.Reset() return nil } return proto.Unmarshal(kv.Value.GetRawBytes(), msg) }
// ValueProto parses the byte slice value as a proto message. func (kv *KeyValue) ValueProto(msg gogoproto.Message) error { switch val := kv.Value.(type) { case nil: msg.Reset() return nil case []byte: return gogoproto.Unmarshal(val, msg) } return fmt.Errorf("unable to unmarshal proto: %T", kv.Value) }
func tryRangeIDKey(kv engine.MVCCKeyValue) (string, error) { if kv.Key.Timestamp != hlc.ZeroTimestamp { return "", fmt.Errorf("range ID keys shouldn't have timestamps: %s", kv.Key) } _, _, suffix, _, err := keys.DecodeRangeIDKey(kv.Key.Key) if err != nil { return "", err } // All range ID keys are stored inline on the metadata. var meta enginepb.MVCCMetadata if err := meta.Unmarshal(kv.Value); err != nil { return "", err } value := roachpb.Value{RawBytes: meta.RawBytes} // Values encoded as protobufs set msg and continue outside the // switch. Other types are handled inside the switch and return. var msg proto.Message switch { case bytes.Equal(suffix, keys.LocalLeaseAppliedIndexSuffix): fallthrough case bytes.Equal(suffix, keys.LocalRaftAppliedIndexSuffix): i, err := value.GetInt() if err != nil { return "", err } return strconv.FormatInt(i, 10), nil case bytes.Equal(suffix, keys.LocalRangeFrozenStatusSuffix): b, err := value.GetBool() if err != nil { return "", err } return strconv.FormatBool(b), nil case bytes.Equal(suffix, keys.LocalAbortCacheSuffix): msg = &roachpb.AbortCacheEntry{} case bytes.Equal(suffix, keys.LocalRangeLastGCSuffix): msg = &hlc.Timestamp{} case bytes.Equal(suffix, keys.LocalRaftTombstoneSuffix): msg = &roachpb.RaftTombstone{} case bytes.Equal(suffix, keys.LocalRaftTruncatedStateSuffix): msg = &roachpb.RaftTruncatedState{} case bytes.Equal(suffix, keys.LocalRangeLeaseSuffix): msg = &roachpb.Lease{} case bytes.Equal(suffix, keys.LocalRangeStatsSuffix): msg = &enginepb.MVCCStats{} case bytes.Equal(suffix, keys.LocalRaftHardStateSuffix): msg = &raftpb.HardState{} case bytes.Equal(suffix, keys.LocalRaftLastIndexSuffix): i, err := value.GetInt() if err != nil { return "", err } return strconv.FormatInt(i, 10), nil case bytes.Equal(suffix, keys.LocalRangeLastVerificationTimestampSuffixDeprecated): msg = &hlc.Timestamp{} case bytes.Equal(suffix, keys.LocalRangeLastReplicaGCTimestampSuffix): msg = &hlc.Timestamp{} default: return "", fmt.Errorf("unknown raft id key %s", suffix) } if err := value.GetProto(msg); err != nil { return "", err } return msg.String(), nil }