@@ -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