MCPcopy
hub / github.com/dgraph-io/badger / Entry

Method Entry

value.go:354–405  ·  view source on GitHub ↗

Entry reads an entry from the provided reader. It also validates the checksum for every entry read. Returns error on failure.

(reader io.Reader)

Source from the content-addressed store, hash-verified

352// Entry reads an entry from the provided reader. It also validates the checksum for every entry
353// read. Returns error on failure.
354func (r *safeRead) Entry(reader io.Reader) (*Entry, error) {
355 tee := newHashReader(reader)
356 var h header
357 hlen, err := h.DecodeFrom(tee)
358 if err != nil {
359 return nil, err
360 }
361 if h.klen > uint32(1<<16) { // Key length must be below uint16.
362 return nil, errTruncate
363 }
364 kl := int(h.klen)
365 if cap(r.k) < kl {
366 r.k = make([]byte, 2*kl)
367 }
368 vl := int(h.vlen)
369 if cap(r.v) < vl {
370 r.v = make([]byte, 2*vl)
371 }
372
373 e := &Entry{}
374 e.offset = r.recordOffset
375 e.hlen = hlen
376 buf := make([]byte, h.klen+h.vlen)
377 if _, err := io.ReadFull(tee, buf[:]); err != nil {
378 if err == io.EOF {
379 err = errTruncate
380 }
381 return nil, err
382 }
383 if r.lf.encryptionEnabled() {
384 if buf, err = r.lf.decryptKV(buf[:], r.recordOffset); err != nil {
385 return nil, err
386 }
387 }
388 e.Key = buf[:h.klen]
389 e.Value = buf[h.klen:]
390 var crcBuf [crc32.Size]byte
391 if _, err := io.ReadFull(reader, crcBuf[:]); err != nil {
392 if err == io.EOF {
393 err = errTruncate
394 }
395 return nil, err
396 }
397 crc := y.BytesToU32(crcBuf[:])
398 if crc != tee.Sum32() {
399 return nil, errTruncate
400 }
401 e.meta = h.meta
402 e.UserMeta = h.userMeta
403 e.ExpiresAt = h.expiresAt
404 return e, nil
405}
406
407// iterate iterates over log file. It doesn't not allocate new memory for every kv pair.
408// Therefore, the kv pair is only valid for the duration of fn call.

Callers 2

iterateMethod · 0.95
TestSafeEntryFunction · 0.95

Calls 6

DecodeFromMethod · 0.95
BytesToU32Function · 0.92
newHashReaderFunction · 0.85
encryptionEnabledMethod · 0.80
decryptKVMethod · 0.80
Sum32Method · 0.80

Tested by 1

TestSafeEntryFunction · 0.76