MCPcopy
hub / github.com/nats-io/nats.go / get

Method get

kv.go:619–674  ·  view source on GitHub ↗
(key string, revision uint64)

Source from the content-addressed store, hash-verified

617}
618
619func (kv *kvs) get(key string, revision uint64) (KeyValueEntry, error) {
620 if !keyValid(key) {
621 return nil, ErrInvalidKey
622 }
623
624 var b strings.Builder
625 b.WriteString(kv.pre)
626 b.WriteString(key)
627
628 var m *RawStreamMsg
629 var err error
630 var _opts [1]JSOpt
631 opts := _opts[:0]
632 if kv.useDirect {
633 opts = append(opts, DirectGet())
634 }
635
636 if revision == kvLatestRevision {
637 m, err = kv.js.GetLastMsg(kv.stream, b.String(), opts...)
638 } else {
639 m, err = kv.js.GetMsg(kv.stream, revision, opts...)
640 // If a sequence was provided, just make sure that the retrieved
641 // message subject matches the request.
642 if err == nil && m.Subject != b.String() {
643 return nil, ErrKeyNotFound
644 }
645 }
646 if err != nil {
647 if errors.Is(err, ErrMsgNotFound) {
648 err = ErrKeyNotFound
649 }
650 return nil, err
651 }
652
653 entry := &kve{
654 bucket: kv.name,
655 key: key,
656 value: m.Data,
657 revision: m.Sequence,
658 created: m.Time,
659 }
660
661 // Double check here that this is not a DEL Operation marker.
662 if len(m.Header) > 0 {
663 switch m.Header.Get(kvop) {
664 case kvdel:
665 entry.op = KeyValueDelete
666 return entry, ErrKeyDeleted
667 case kvpurge:
668 entry.op = KeyValuePurge
669 return entry, ErrKeyDeleted
670 }
671 }
672
673 return entry, nil
674}
675
676// Put will place the new value for the key into the store.

Callers 3

GetMethod · 0.95
GetRevisionMethod · 0.95
CreateMethod · 0.95

Calls 7

DirectGetFunction · 0.85
keyValidFunction · 0.70
GetLastMsgMethod · 0.65
GetMsgMethod · 0.65
GetMethod · 0.65
StringMethod · 0.45
IsMethod · 0.45

Tested by

no test coverage detected