Skip to content

Commit b47ad0d

Browse files
committed
add context support
1 parent 09fc683 commit b47ad0d

File tree

3 files changed

+23
-16
lines changed

3 files changed

+23
-16
lines changed

README.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ $ go get -u -v gopkg.in/go-session/redis.v1
1818
package main
1919

2020
import (
21+
"context"
2122
"fmt"
2223
"net/http"
2324

@@ -36,7 +37,7 @@ func main() {
3637
)
3738

3839
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
39-
store, err := session.Start(w, r)
40+
store, err := session.Start(context.Background(), w, r)
4041
if err != nil {
4142
fmt.Fprint(w, err)
4243
return
@@ -53,7 +54,7 @@ func main() {
5354
})
5455

5556
http.HandleFunc("/foo", func(w http.ResponseWriter, r *http.Request) {
56-
store, err := session.Start(w, r)
57+
store, err := session.Start(context.Background(), w, r)
5758
if err != nil {
5859
fmt.Fprint(w, err)
5960
return

redis.go

+13-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package redis
22

33
import (
4+
"context"
45
"encoding/json"
56
"sync"
67
"time"
@@ -54,17 +55,17 @@ func (s *managerStore) parseValue(value string) (map[string]string, error) {
5455
return values, nil
5556
}
5657

57-
func (s *managerStore) Create(sid string, expired int64) (session.Store, error) {
58+
func (s *managerStore) Create(ctx context.Context, sid string, expired int64) (session.Store, error) {
5859
values := make(map[string]string)
59-
return &store{sid: sid, cli: s.cli, expired: expired, values: values}, nil
60+
return &store{ctx: ctx, sid: sid, cli: s.cli, expired: expired, values: values}, nil
6061
}
6162

62-
func (s *managerStore) Update(sid string, expired int64) (session.Store, error) {
63+
func (s *managerStore) Update(ctx context.Context, sid string, expired int64) (session.Store, error) {
6364
value, err := s.getValue(sid)
6465
if err != nil {
6566
return nil, err
6667
} else if value == "" {
67-
return s.Create(sid, expired)
68+
return s.Create(ctx, sid, expired)
6869
}
6970

7071
cmd := s.cli.Set(sid, value, time.Duration(expired)*time.Second)
@@ -77,15 +78,15 @@ func (s *managerStore) Update(sid string, expired int64) (session.Store, error)
7778
return nil, err
7879
}
7980

80-
return &store{sid: sid, cli: s.cli, expired: expired, values: values}, nil
81+
return &store{ctx: ctx, sid: sid, cli: s.cli, expired: expired, values: values}, nil
8182
}
8283

83-
func (s *managerStore) Delete(sid string) error {
84+
func (s *managerStore) Delete(_ context.Context, sid string) error {
8485
cmd := s.cli.Del(sid)
8586
return cmd.Err()
8687
}
8788

88-
func (s *managerStore) Check(sid string) (bool, error) {
89+
func (s *managerStore) Check(_ context.Context, sid string) (bool, error) {
8990
cmd := s.cli.Get(sid)
9091
if err := cmd.Err(); err != nil {
9192
if err == redis.Nil {
@@ -106,6 +107,11 @@ type store struct {
106107
expired int64
107108
values map[string]string
108109
sync.RWMutex
110+
ctx context.Context
111+
}
112+
113+
func (s *store) Context() context.Context {
114+
return s.ctx
109115
}
110116

111117
func (s *store) SessionID() string {

redis_test.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func TestStore(t *testing.T) {
1717
})
1818
defer mstore.Close()
1919

20-
store, err := mstore.Create("store", 2)
20+
store, err := mstore.Create(nil, "store", 2)
2121
if err != nil {
2222
t.Error(err.Error())
2323
return
@@ -88,7 +88,7 @@ func TestManagerStore(t *testing.T) {
8888
defer mstore.Close()
8989

9090
sid := "manager"
91-
store, err := mstore.Create(sid, 2)
91+
store, err := mstore.Create(nil, sid, 2)
9292
if err != nil {
9393
t.Error(err.Error())
9494
return
@@ -101,7 +101,7 @@ func TestManagerStore(t *testing.T) {
101101
return
102102
}
103103

104-
store, err = mstore.Update(sid, 2)
104+
store, err = mstore.Update(nil, sid, 2)
105105
if err != nil {
106106
t.Error(err.Error())
107107
return
@@ -113,13 +113,13 @@ func TestManagerStore(t *testing.T) {
113113
return
114114
}
115115

116-
err = mstore.Delete(sid)
116+
err = mstore.Delete(nil, sid)
117117
if err != nil {
118118
t.Error(err.Error())
119119
return
120120
}
121121

122-
exists, err := mstore.Check(sid)
122+
exists, err := mstore.Check(nil, sid)
123123
if err != nil {
124124
t.Error(err.Error())
125125
return
@@ -136,7 +136,7 @@ func TestStoreWithExpired(t *testing.T) {
136136
defer mstore.Close()
137137

138138
sid := "test_store_expired"
139-
store, err := mstore.Create(sid, 1)
139+
store, err := mstore.Create(nil, sid, 1)
140140
if err != nil {
141141
t.Error(err.Error())
142142
return
@@ -157,7 +157,7 @@ func TestStoreWithExpired(t *testing.T) {
157157

158158
time.Sleep(time.Second * 2)
159159

160-
exists, err := mstore.Check(sid)
160+
exists, err := mstore.Check(nil, sid)
161161
if err != nil {
162162
t.Error(err.Error())
163163
return

0 commit comments

Comments
 (0)