Merge pull request #579 from magodo/magodo/store_get_reset_expiry

`memoryStore.Read()` returns honor `Record.Expiry`
This commit is contained in:
Asim Aslam 2019-07-11 08:39:46 +01:00 committed by GitHub
commit 47d91a1f64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 53 additions and 5 deletions

View File

@ -32,10 +32,16 @@ func (m *memoryStore) Dump() ([]*store.Record, error) {
d := v.r.Expiry d := v.r.Expiry
t := time.Since(v.c) t := time.Since(v.c)
if d > time.Duration(0) {
// expired // expired
if d > time.Duration(0) && t > d { if t > d {
continue continue
} }
// update expiry
v.r.Expiry -= t
v.c = time.Now()
}
values = append(values, v.r) values = append(values, v.r)
} }
@ -56,9 +62,14 @@ func (m *memoryStore) Read(key string) (*store.Record, error) {
t := time.Since(v.c) t := time.Since(v.c)
// expired // expired
if d > time.Duration(0) && t > d { if d > time.Duration(0) {
if t > d {
return nil, store.ErrNotFound return nil, store.ErrNotFound
} }
// update expiry
v.r.Expiry -= t
v.c = time.Now()
}
return v.r, nil return v.r, nil
} }

View File

@ -0,0 +1,37 @@
package memory
import (
"testing"
"time"
"github.com/micro/go-micro/data/store"
)
func TestReadRecordExpire(t *testing.T) {
s := NewStore()
var (
key = "foo"
expire = 100 * time.Millisecond
)
rec := &store.Record{
Key: key,
Value: nil,
Expiry: expire,
}
s.Write(rec)
rrec, err := s.Read(key)
if err != nil {
t.Fatal(err)
}
if rrec.Expiry >= expire {
t.Fatal("expiry of read record is not changed")
}
time.Sleep(expire)
if _, err := s.Read(key); err != store.ErrNotFound {
t.Fatal("expire elapsed, but key still accessable")
}
}