@@ -152,64 +152,12 @@ func (lc *LocalCache) SetIfAbsent(key string, updated *List) *List {
152152 return updated
153153}
154154
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-
196155func (lc * LocalCache ) getInternal (key []byte , readFromDisk bool ) (* List , error ) {
197156 getNewPlistNil := func () (* List , error ) {
198157 lc .RLock ()
199158 defer lc .RUnlock ()
200159 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 )
213161 }
214162 return nil , nil
215163 }
@@ -248,60 +196,58 @@ func (lc *LocalCache) getInternal(key []byte, readFromDisk bool) (*List, error)
248196}
249197
250198func (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
262208 }
263209 }
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 )
269210 lc .RUnlock ()
211+
212+ txn := pstore .NewTransactionAt (lc .startTs , false )
213+ item , err := txn .Get (key )
270214 if err != nil {
271- validatePl ()
272- return pl , nil
215+ return pl , err
273216 }
274- } else {
275- lc .RUnlock ()
276- }
277217
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+
282225 return pl , err
283226 }
284227
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+ }
292232 if err != nil {
293- validatePl ()
294233 return pl , err
295234 }
296235
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 ]
298248 return pl , nil
299249}
300250
301- func (lc * LocalCache ) GetSingle (key []byte ) (* List , error ) {
302- return lc .getSingleInternal (key , true )
303- }
304-
305251// Get retrieves the cached version of the list associated with the given key.
306252func (lc * LocalCache ) Get (key []byte ) (* List , error ) {
307253 return lc .getInternal (key , true )
0 commit comments