1
1
package cache
2
2
3
3
import (
4
+ "errors"
4
5
"sync"
5
6
"sync/atomic"
6
7
"time"
@@ -188,11 +189,25 @@ func (c *localCache) Get(k Key) (Value, error) {
188
189
return en .getValue (), nil
189
190
}
190
191
192
+ func (c * localCache ) GetActive (k Key ) (Value , error ) {
193
+ obj , err := c .Get (k )
194
+ if err != nil {
195
+ return nil , err
196
+ }
197
+ en := c .cache .get (k , sum (k ))
198
+ if ! en .getInvalidated () {
199
+ return obj , nil
200
+ }
201
+ return nil , errors .New ("entry invalidated" )
202
+ }
203
+
191
204
// GetAllKeys returns all keys.
192
205
func (c * localCache ) GetAllKeys () []interface {} {
193
206
keys := make ([]interface {}, 0 , c .cache .len ())
194
207
c .cache .walk (func (en * entry ) {
195
- keys = append (keys , en .key )
208
+ if ! en .getInvalidated () {
209
+ keys = append (keys , en .key )
210
+ }
196
211
})
197
212
return keys
198
213
}
@@ -201,7 +216,9 @@ func (c *localCache) GetAllKeys() []interface{} {
201
216
func (c * localCache ) GetAllValues () []interface {} {
202
217
values := make ([]interface {}, 0 , c .cache .len ())
203
218
c .cache .walk (func (en * entry ) {
204
- values = append (values , en .getValue ())
219
+ if ! en .getInvalidated () {
220
+ values = append (values , en .getValue ())
221
+ }
205
222
})
206
223
return values
207
224
}
@@ -210,7 +227,9 @@ func (c *localCache) GetAllValues() []interface{} {
210
227
func (c * localCache ) GetAll () map [interface {}]interface {} {
211
228
var values = make (map [interface {}]interface {}, c .cache .len ())
212
229
c .cache .walk (func (en * entry ) {
213
- values [en .key ] = en .getValue ()
230
+ if ! en .getInvalidated () {
231
+ values [en .key ] = en .getValue ()
232
+ }
214
233
})
215
234
return values
216
235
}
0 commit comments