8
8
"time"
9
9
10
10
memcacheCli "github.com/bradfitz/gomemcache/memcache"
11
- "github.com/pkg/errors"
12
11
log "github.com/sirupsen/logrus"
13
12
14
13
emodels "github.com/teran/archived/exporter/models"
@@ -19,16 +18,22 @@ import (
19
18
var _ metadata.Repository = (* memcache )(nil )
20
19
21
20
type memcache struct {
22
- cli * memcacheCli.Client
23
- repo metadata.Repository
24
- ttl time.Duration
21
+ cli * memcacheCli.Client
22
+ keyPrefix string
23
+ repo metadata.Repository
24
+ ttl time.Duration
25
25
}
26
26
27
- func New (cli * memcacheCli.Client , repo metadata.Repository , ttl time.Duration ) metadata.Repository {
27
+ func New (cli * memcacheCli.Client , repo metadata.Repository , ttl time.Duration , keyPrefix string ) metadata.Repository {
28
+ if keyPrefix == "" {
29
+ keyPrefix = "_"
30
+ }
31
+
28
32
return & memcache {
29
- cli : cli ,
30
- repo : repo ,
31
- ttl : ttl ,
33
+ cli : cli ,
34
+ keyPrefix : keyPrefix ,
35
+ repo : repo ,
36
+ ttl : ttl ,
32
37
}
33
38
}
34
39
@@ -37,7 +42,11 @@ func (m *memcache) CreateContainer(ctx context.Context, name string) error {
37
42
}
38
43
39
44
func (m * memcache ) ListContainers (ctx context.Context ) ([]string , error ) {
40
- cacheKey := "_ListContainers"
45
+ cacheKey := strings .Join ([]string {
46
+ m .keyPrefix ,
47
+ "ListContainers" ,
48
+ }, ":" )
49
+
41
50
item , err := m .cli .Get (cacheKey )
42
51
if err != nil {
43
52
if err == memcacheCli .ErrCacheMiss {
@@ -47,7 +56,7 @@ func (m *memcache) ListContainers(ctx context.Context) ([]string, error) {
47
56
48
57
containers , err := m .repo .ListContainers (ctx )
49
58
if err != nil {
50
- return nil , errors . Wrap ( err , "error retrieving container list" )
59
+ return nil , err
51
60
}
52
61
53
62
if err := store (m , cacheKey , containers ); err != nil {
@@ -66,7 +75,7 @@ func (m *memcache) ListContainers(ctx context.Context) ([]string, error) {
66
75
var retrievedValue []string
67
76
err = json .Unmarshal (item .Value , & retrievedValue )
68
77
if err != nil {
69
- return nil , errors . Wrap ( err , "error unmarshaling cached value" )
78
+ return nil , err
70
79
}
71
80
72
81
return retrievedValue , nil
@@ -81,7 +90,12 @@ func (m *memcache) CreateVersion(ctx context.Context, container string) (string,
81
90
}
82
91
83
92
func (m * memcache ) GetLatestPublishedVersionByContainer (ctx context.Context , container string ) (string , error ) {
84
- cacheKey := "_GetLatestPublishedVersionByContainer:" + container
93
+ cacheKey := strings .Join ([]string {
94
+ m .keyPrefix ,
95
+ "GetLatestPublishedVersionByContainer" ,
96
+ container ,
97
+ }, ":" )
98
+
85
99
item , err := m .cli .Get (cacheKey )
86
100
if err != nil {
87
101
if err == memcacheCli .ErrCacheMiss {
@@ -91,7 +105,7 @@ func (m *memcache) GetLatestPublishedVersionByContainer(ctx context.Context, con
91
105
92
106
version , err := m .repo .GetLatestPublishedVersionByContainer (ctx , container )
93
107
if err != nil {
94
- return "" , errors . Wrapf ( err , "error retrieving latest version for container `%s`" , container )
108
+ return "" , err
95
109
}
96
110
97
111
if err := store (m , cacheKey , version ); err != nil {
@@ -110,14 +124,19 @@ func (m *memcache) GetLatestPublishedVersionByContainer(ctx context.Context, con
110
124
var retrievedValue string
111
125
err = json .Unmarshal (item .Value , & retrievedValue )
112
126
if err != nil {
113
- return "" , errors . Wrap ( err , "error unmarshaling cached value" )
127
+ return "" , err
114
128
}
115
129
116
130
return retrievedValue , nil
117
131
}
118
132
119
133
func (m * memcache ) ListAllVersionsByContainer (ctx context.Context , container string ) ([]models.Version , error ) {
120
- cacheKey := "_ListAllVersionsByContainer:" + container
134
+ cacheKey := strings .Join ([]string {
135
+ m .keyPrefix ,
136
+ "ListAllVersionsByContainer" ,
137
+ container ,
138
+ }, ":" )
139
+
121
140
item , err := m .cli .Get (cacheKey )
122
141
if err != nil {
123
142
if err == memcacheCli .ErrCacheMiss {
@@ -127,7 +146,7 @@ func (m *memcache) ListAllVersionsByContainer(ctx context.Context, container str
127
146
128
147
versions , err := m .repo .ListAllVersionsByContainer (ctx , container )
129
148
if err != nil {
130
- return nil , errors . Wrapf ( err , "error retrieving latest version for container `%s`" , container )
149
+ return nil , err
131
150
}
132
151
133
152
if err := store (m , cacheKey , versions ); err != nil {
@@ -146,14 +165,19 @@ func (m *memcache) ListAllVersionsByContainer(ctx context.Context, container str
146
165
var retrievedValue []models.Version
147
166
err = json .Unmarshal (item .Value , & retrievedValue )
148
167
if err != nil {
149
- return nil , errors . Wrap ( err , "error unmarshaling cached value" )
168
+ return nil , err
150
169
}
151
170
152
171
return retrievedValue , nil
153
172
}
154
173
155
174
func (m * memcache ) ListPublishedVersionsByContainer (ctx context.Context , container string ) ([]models.Version , error ) {
156
- cacheKey := "_ListPublishedVersionsByContainer:" + container
175
+ cacheKey := strings .Join ([]string {
176
+ m .keyPrefix ,
177
+ "ListPublishedVersionsByContainer" ,
178
+ container ,
179
+ }, ":" )
180
+
157
181
item , err := m .cli .Get (cacheKey )
158
182
if err != nil {
159
183
if err == memcacheCli .ErrCacheMiss {
@@ -163,7 +187,7 @@ func (m *memcache) ListPublishedVersionsByContainer(ctx context.Context, contain
163
187
164
188
versions , err := m .repo .ListPublishedVersionsByContainer (ctx , container )
165
189
if err != nil {
166
- return nil , errors . Wrapf ( err , "error retrieving latest version for container `%s`" , container )
190
+ return nil , err
167
191
}
168
192
169
193
if err := store (m , cacheKey , versions ); err != nil {
@@ -182,7 +206,7 @@ func (m *memcache) ListPublishedVersionsByContainer(ctx context.Context, contain
182
206
var retrievedValue []models.Version
183
207
err = json .Unmarshal (item .Value , & retrievedValue )
184
208
if err != nil {
185
- return nil , errors . Wrap ( err , "error unmarshaling cached value" )
209
+ return nil , err
186
210
}
187
211
188
212
return retrievedValue , nil
@@ -195,7 +219,8 @@ func (m *memcache) ListPublishedVersionsByContainerAndPage(ctx context.Context,
195
219
}
196
220
197
221
cacheKey := strings .Join ([]string {
198
- "_ListPublishedVersionsByContainerAndPage" ,
222
+ m .keyPrefix ,
223
+ "ListPublishedVersionsByContainerAndPage" ,
199
224
container ,
200
225
strconv .FormatUint (offset , 10 ),
201
226
strconv .FormatUint (limit , 10 ),
@@ -210,7 +235,7 @@ func (m *memcache) ListPublishedVersionsByContainerAndPage(ctx context.Context,
210
235
211
236
n , versions , err := m .repo .ListPublishedVersionsByContainerAndPage (ctx , container , offset , limit )
212
237
if err != nil {
213
- return 0 , nil , errors . Wrapf ( err , "error retrieving published versions for container `%s` (offset=%d; limit=%d)" , container , offset , limit )
238
+ return 0 , nil , err
214
239
}
215
240
216
241
if err := store (m , cacheKey , proxy {Total : n , Versions : versions }); err != nil {
@@ -229,7 +254,7 @@ func (m *memcache) ListPublishedVersionsByContainerAndPage(ctx context.Context,
229
254
var retrievedValue proxy
230
255
err = json .Unmarshal (item .Value , & retrievedValue )
231
256
if err != nil {
232
- return 0 , nil , errors . Wrap ( err , "error unmarshaling cached value" )
257
+ return 0 , nil , err
233
258
}
234
259
235
260
return retrievedValue .Total , retrievedValue .Versions , nil
@@ -258,7 +283,8 @@ func (m *memcache) ListObjects(ctx context.Context, container, version string, o
258
283
}
259
284
260
285
cacheKey := strings .Join ([]string {
261
- "_ListObjects" ,
286
+ m .keyPrefix ,
287
+ "ListObjects" ,
262
288
container ,
263
289
version ,
264
290
strconv .FormatUint (offset , 10 ),
@@ -274,7 +300,7 @@ func (m *memcache) ListObjects(ctx context.Context, container, version string, o
274
300
275
301
n , objects , err := m .repo .ListObjects (ctx , container , version , offset , limit )
276
302
if err != nil {
277
- return 0 , nil , errors . Wrapf ( err , "error retrieving objects for `%s/%s`, offset=%d; limit=%d" , container , version , offset , limit )
303
+ return 0 , nil , err
278
304
}
279
305
280
306
if err := store (m , cacheKey , proxy {Total : n , Objects : objects }); err != nil {
@@ -293,7 +319,7 @@ func (m *memcache) ListObjects(ctx context.Context, container, version string, o
293
319
var retrievedValue proxy
294
320
err = json .Unmarshal (item .Value , & retrievedValue )
295
321
if err != nil {
296
- return 0 , nil , errors . Wrap ( err , "error unmarshaling cached value" )
322
+ return 0 , nil , err
297
323
}
298
324
299
325
return retrievedValue .Total , retrievedValue .Objects , nil
@@ -313,7 +339,8 @@ func (m *memcache) CreateBLOB(ctx context.Context, checksum string, size uint64,
313
339
314
340
func (m * memcache ) GetBlobKeyByObject (ctx context.Context , container , version , key string ) (string , error ) {
315
341
cacheKey := strings .Join ([]string {
316
- "_GetBlobKeyByObject" ,
342
+ m .keyPrefix ,
343
+ "GetBlobKeyByObject" ,
317
344
container ,
318
345
version ,
319
346
key ,
@@ -328,7 +355,7 @@ func (m *memcache) GetBlobKeyByObject(ctx context.Context, container, version, k
328
355
329
356
key , err := m .repo .GetBlobKeyByObject (ctx , container , version , key )
330
357
if err != nil {
331
- return "" , errors . Wrapf ( err , "error retrieving object key for `%s/%s/%s`" , container , version , key )
358
+ return "" , err
332
359
}
333
360
334
361
if err = store (m , cacheKey , key ); err != nil {
@@ -347,7 +374,7 @@ func (m *memcache) GetBlobKeyByObject(ctx context.Context, container, version, k
347
374
var retrievedValue string
348
375
err = json .Unmarshal (item .Value , & retrievedValue )
349
376
if err != nil {
350
- return "" , errors . Wrap ( err , "error unmarshaling cached value" )
377
+ return "" , err
351
378
}
352
379
353
380
return retrievedValue , nil
0 commit comments