@@ -152,64 +152,12 @@ func (lc *LocalCache) SetIfAbsent(key string, updated *List) *List {
152
152
return updated
153
153
}
154
154
155
- func (lc * LocalCache ) getSingleInternal (key []byte , readFromDisk bool ) (* List , error ) {
156
- getNewPlistNil := func () (* List , error ) {
157
- lc .RLock ()
158
- defer lc .RUnlock ()
159
- if lc .plists == nil {
160
- pl , err := GetSingleValueForKey (key , lc .startTs )
161
- return pl , err
162
- }
163
- return nil , nil
164
- }
165
-
166
- if l , err := getNewPlistNil (); l != nil || err != nil {
167
- return l , err
168
- }
169
-
170
- skey := string (key )
171
- if pl := lc .getNoStore (skey ); pl != nil {
172
- return pl , nil
173
- }
174
-
175
- var pl * List
176
- var err error
177
- if readFromDisk {
178
- pl , err = GetSingleValueForKey (key , lc .startTs )
179
- } else {
180
- pl = & List {
181
- key : key ,
182
- plist : new (pb.PostingList ),
183
- }
184
- }
185
-
186
- // If we just brought this posting list into memory and we already have a delta for it, let's
187
- // apply it before returning the list.
188
- lc .RLock ()
189
- if delta , ok := lc .deltas [skey ]; ok && len (delta ) > 0 {
190
- pl .setMutation (lc .startTs , delta )
191
- }
192
- lc .RUnlock ()
193
- return pl , err
194
- }
195
-
196
155
func (lc * LocalCache ) getInternal (key []byte , readFromDisk bool ) (* List , error ) {
197
156
getNewPlistNil := func () (* List , error ) {
198
157
lc .RLock ()
199
158
defer lc .RUnlock ()
200
159
if lc .plists == nil {
201
- if readFromDisk {
202
- return getNew (key , pstore , lc .startTs )
203
- } else {
204
- pl := & List {
205
- key : key ,
206
- plist : new (pb.PostingList ),
207
- }
208
- if delta , ok := lc .deltas [string (key )]; ok && len (delta ) > 0 {
209
- pl .setMutation (lc .startTs , delta )
210
- }
211
- return pl , nil
212
- }
160
+ return getNew (key , pstore , lc .startTs )
213
161
}
214
162
return nil , nil
215
163
}
@@ -248,60 +196,58 @@ func (lc *LocalCache) getInternal(key []byte, readFromDisk bool) (*List, error)
248
196
}
249
197
250
198
func (lc * LocalCache ) GetSinglePosting (key []byte ) (* pb.PostingList , error ) {
251
- pl := & pb.PostingList {}
252
- validatePl := func () {
253
- i := 0
254
- for _ , postings := range pl .Postings {
255
- if hasDeleteAll (postings ) {
256
- pl = nil
257
- return
258
- }
259
- if postings .Op != Del {
260
- pl .Postings [i ] = postings
261
- i ++
199
+
200
+ getPostings := func () (* pb.PostingList , error ) {
201
+ pl := & pb.PostingList {}
202
+ lc .RLock ()
203
+ if delta , ok := lc .deltas [string (key )]; ok && len (delta ) > 0 {
204
+ err := pl .Unmarshal (delta )
205
+ if err != nil {
206
+ lc .RUnlock ()
207
+ return pl , nil
262
208
}
263
209
}
264
- pl .Postings = pl .Postings [:i ]
265
- }
266
- lc .RLock ()
267
- if delta , ok := lc .deltas [string (key )]; ok && len (delta ) > 0 {
268
- err := pl .Unmarshal (delta )
269
210
lc .RUnlock ()
211
+
212
+ txn := pstore .NewTransactionAt (lc .startTs , false )
213
+ item , err := txn .Get (key )
270
214
if err != nil {
271
- validatePl ()
272
- return pl , nil
215
+ return pl , err
273
216
}
274
- } else {
275
- lc .RUnlock ()
276
- }
277
217
278
- txn := pstore .NewTransactionAt (lc .startTs , false )
279
- item , err := txn .Get (key )
280
- if err != nil {
281
- validatePl ()
218
+ err = item .Value (func (val []byte ) error {
219
+ if err := pl .Unmarshal (val ); err != nil {
220
+ return err
221
+ }
222
+ return nil
223
+ })
224
+
282
225
return pl , err
283
226
}
284
227
285
- err = item .Value (func (val []byte ) error {
286
- if err := pl .Unmarshal (val ); err != nil {
287
- return err
288
- }
289
- return nil
290
- })
291
-
228
+ pl , err := getPostings ()
229
+ if err == badger .ErrKeyNotFound {
230
+ err = nil
231
+ }
292
232
if err != nil {
293
- validatePl ()
294
233
return pl , err
295
234
}
296
235
297
- validatePl ()
236
+ // Filter and remove STAR_ALL and OP_DELETE Postings
237
+ idx := 0
238
+ for _ , postings := range pl .Postings {
239
+ if hasDeleteAll (postings ) {
240
+ return nil , nil
241
+ }
242
+ if postings .Op != Del {
243
+ pl .Postings [idx ] = postings
244
+ idx ++
245
+ }
246
+ }
247
+ pl .Postings = pl .Postings [:idx ]
298
248
return pl , nil
299
249
}
300
250
301
- func (lc * LocalCache ) GetSingle (key []byte ) (* List , error ) {
302
- return lc .getSingleInternal (key , true )
303
- }
304
-
305
251
// Get retrieves the cached version of the list associated with the given key.
306
252
func (lc * LocalCache ) Get (key []byte ) (* List , error ) {
307
253
return lc .getInternal (key , true )
0 commit comments