Skip to content

Commit 46115de

Browse files
committed
all: add Len
1 parent 77b4425 commit 46115de

File tree

4 files changed

+55
-9
lines changed

4 files changed

+55
-9
lines changed

cache.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,27 @@ func (l *lru) clear() {
4040
for {
4141
select {
4242
case <-t.C:
43-
l.mu.Lock()
44-
for e := l.elems.Front(); e != nil; e = e.Next() {
45-
l.elems.Remove(e)
46-
}
47-
l.mu.Unlock()
43+
l.flush()
4844
}
4945
}
5046
}
5147

48+
func (l *lru) flush() {
49+
l.mu.Lock()
50+
defer l.mu.Unlock()
51+
52+
for e := l.elems.Front(); e != nil; e = e.Next() {
53+
l.elems.Remove(e)
54+
}
55+
l.size = 0
56+
}
57+
58+
func (l *lru) Len() uint {
59+
l.mu.Lock()
60+
defer l.mu.Unlock()
61+
return l.size
62+
}
63+
5264
func (l *lru) Get(k string) (string, bool) {
5365
l.mu.RLock()
5466
defer l.mu.RUnlock()
@@ -77,10 +89,11 @@ func (l *lru) Put(k, v string) {
7789
}
7890

7991
// check if cache is full
92+
l.elems.PushFront(i)
8093
if l.size+1 > l.cap {
8194
l.elems.Remove(l.elems.Back())
95+
} else {
96+
l.size++
8297
}
83-
l.elems.PushFront(i)
84-
l.size++
8598
return
8699
}

cache_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,18 @@ func TestLRU(t *testing.T) {
1212
if _, ok := l.Get("a"); ok {
1313
t.Fatalf("Get value from empty LRU")
1414
}
15+
if l.Len() != 0 {
16+
t.Fatalf("wrong size, want 0, got %v", l.Len())
17+
}
1518

1619
l.Put("a", "1") // a
1720
v, ok := l.Get("a")
1821
if !ok { // a -> b
1922
t.Fatalf("Get value from LRU found nothing")
2023
}
24+
if l.Len() != 1 {
25+
t.Fatalf("wrong size, want 1, got %v", l.Len())
26+
}
2127

2228
l.Put("b", "2") // b -> a
2329
v, ok = l.Get("a")
@@ -27,6 +33,10 @@ func TestLRU(t *testing.T) {
2733
if v != "1" {
2834
t.Fatalf("Get value from LRU want 1 got %v", v)
2935
}
36+
if l.Len() != 2 {
37+
t.Fatalf("wrong size, want 2, got %v", l.Len())
38+
}
39+
3040
l.Put("c", "3") // c -> a
3141
_, ok = l.Get("b")
3242
if ok {
@@ -39,6 +49,28 @@ func TestLRU(t *testing.T) {
3949
if v != "3" {
4050
t.Fatalf("Get value from LRU want 3 got %v", v)
4151
}
52+
if l.Len() != 2 {
53+
t.Fatalf("wrong size, want 2, got %v", l.Len())
54+
}
55+
56+
l.flush()
57+
if l.Len() != 0 {
58+
t.Fatalf("wrong size, want 0, got %v", l.Len())
59+
}
60+
l.Put("a", "1")
61+
l.Put("b", "1")
62+
l.Put("c", "1")
63+
l.Put("a", "1")
64+
v, ok = l.Get("a")
65+
if !ok { // a
66+
t.Fatalf("Get value from LRU found nothing")
67+
}
68+
if v != "1" {
69+
t.Fatalf("Get value from LRU want 1 got %v", v)
70+
}
71+
if l.Len() != 2 {
72+
t.Fatalf("wrong size, want 2, got %v", l.Len())
73+
}
4274
}
4375

4476
func rands() string {

config_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ func TestParseConfig(t *testing.T) {
1818
if v.Field(i).Kind() == reflect.Struct {
1919
continue
2020
}
21-
vv, ok := v.Field(i).Interface().(string)
22-
if ok && len(vv) > 0 {
21+
if v.Field(i).Interface() != nil {
2322
continue
2423
}
2524
t.Fatalf("read empty from config, field: %v", v.Type().Field(i).Name)

docker/docker-compose.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ services:
88
redir:
99
container_name: redir
1010
restart: always
11+
volumes:
12+
- ../data/backup:/data/backup
1113
image: golang-design/redir:latest
1214
environment:
1315
REDIR_CONF: ./data/container.yml

0 commit comments

Comments
 (0)