MCPcopy Index your code
hub / github.com/CovenantSQL/CovenantSQL / Write

Method Write

kayak/wal/leveldb_wal.go:64–118  ·  view source on GitHub ↗

Write implements Wal.Write.

(l *kt.Log)

Source from the content-addressed store, hash-verified

62
63// Write implements Wal.Write.
64func (p *LevelDBWal) Write(l *kt.Log) (err error) {
65 if atomic.LoadUint32(&p.closed) == 1 {
66 err = ErrWalClosed
67 return
68 }
69
70 // mark wal as already read
71 atomic.CompareAndSwapUint32(&p.read, 0, 1)
72
73 if l == nil {
74 err = ErrInvalidLog
75 return
76 }
77
78 // build header headerKey
79 headerKey := append(append([]byte(nil), logHeaderKeyPrefix...), p.uint64ToBytes(l.Index)...)
80
81 if _, err = p.db.Get(headerKey, nil); err != nil && err != leveldb.ErrNotFound {
82 err = errors.Wrap(err, "access leveldb failed")
83 return
84 } else if err == nil {
85 err = ErrAlreadyExists
86 return
87 }
88
89 dataKey := append(append([]byte(nil), logDataKeyPrefix...), p.uint64ToBytes(l.Index)...)
90
91 // write data first
92 var enc *bytes.Buffer
93 if enc, err = utils.EncodeMsgPack(l.Data); err != nil {
94 err = errors.Wrap(err, "encode log data failed")
95 return
96 }
97
98 if err = p.db.Put(dataKey, enc.Bytes(), nil); err != nil {
99 err = errors.Wrap(err, "write log data failed")
100 return
101 }
102
103 // write header
104 l.DataLength = uint64(enc.Len())
105
106 if enc, err = utils.EncodeMsgPack(l.LogHeader); err != nil {
107 err = errors.Wrap(err, "encode log header failed")
108 return
109 }
110
111 // save header
112 if err = p.db.Put(headerKey, enc.Bytes(), nil); err != nil {
113 err = errors.Wrap(err, "encode log header failed")
114 return
115 }
116
117 return
118}
119
120// Read implements Wal.Read.
121func (p *LevelDBWal) Read() (l *kt.Log, err error) {

Callers 3

TestRuntimeFunction · 0.95
TestLevelDBWal_WriteFunction · 0.95
BenchmarkSignSignatureFunction · 0.95

Calls 6

uint64ToBytesMethod · 0.95
EncodeMsgPackFunction · 0.92
PutMethod · 0.80
GetMethod · 0.65
BytesMethod · 0.45
LenMethod · 0.45

Tested by 3

TestRuntimeFunction · 0.76
TestLevelDBWal_WriteFunction · 0.76
BenchmarkSignSignatureFunction · 0.76