@@ -20,7 +20,6 @@ import (
20
20
21
21
"github.com/aws/aws-sdk-go-v2/service/s3"
22
22
"github.com/creachadair/atomicfile"
23
- "github.com/creachadair/mds/value"
24
23
"github.com/creachadair/taskgroup"
25
24
"github.com/goproxy/goproxy"
26
25
"github.com/tailscale/go-cache-plugin/internal/s3util"
@@ -98,6 +97,7 @@ type Cacher struct {
98
97
tasks * taskgroup.Group
99
98
start func (taskgroup.Task ) * taskgroup.Group
100
99
sema * semaphore.Weighted
100
+ client * s3util.Client
101
101
102
102
pathError expvar.Int // errors constructing file paths
103
103
getRequest expvar.Int // total number of Get requests
@@ -125,6 +125,7 @@ func (c *Cacher) init() {
125
125
}
126
126
c .tasks , c .start = taskgroup .New (nil ).Limit (nt )
127
127
c .sema = semaphore .NewWeighted (int64 (nt ))
128
+ c .client = & s3util.Client {Client : c .S3Client , Bucket : c .S3Bucket }
128
129
})
129
130
}
130
131
@@ -161,22 +162,19 @@ func (c *Cacher) Get(ctx context.Context, name string) (_ io.ReadCloser, oerr er
161
162
}
162
163
defer c .sema .Release (1 )
163
164
164
- obj , err := c .S3Client .GetObject (ctx , & s3.GetObjectInput {
165
- Bucket : & c .S3Bucket ,
166
- Key : value .Ptr (c .makeKey (hash )),
167
- })
168
- if s3util .IsNotExist (err ) {
165
+ obj , err := c .client .Get (ctx , c .makeKey (hash ))
166
+ if errors .Is (err , fs .ErrNotExist ) {
169
167
c .getFaultMiss .Add (1 )
170
- return nil , fmt . Errorf ( "%s: %w" , name , fs . ErrNotExist )
168
+ return nil , err
171
169
} else if err != nil {
172
170
c .getFaultError .Add (1 )
173
171
return nil , err
174
172
}
173
+ defer obj .Close ()
175
174
c .getFaultHit .Add (1 )
176
175
c .vlogf ("mc F GET %q hit (%s)" , name , hash )
177
- defer obj .Body .Close ()
178
176
179
- if _ , err := c .putLocal (ctx , name , path , obj . Body ); err != nil {
177
+ if _ , err := c .putLocal (ctx , name , path , obj ); err != nil {
180
178
return nil , err
181
179
}
182
180
rc , _ , err := openReader (path )
@@ -233,13 +231,7 @@ func (c *Cacher) Put(ctx context.Context, name string, data io.ReadSeeker) (oerr
233
231
sctx , cancel := context .WithTimeout (context .WithoutCancel (ctx ), 1 * time .Minute )
234
232
defer cancel ()
235
233
236
- _ , err := c .S3Client .PutObject (sctx , & s3.PutObjectInput {
237
- Bucket : & c .S3Bucket ,
238
- Key : value .Ptr (c .makeKey (hash )),
239
- Body : f ,
240
- ContentLength : & size ,
241
- })
242
- if err != nil {
234
+ if err := c .client .Put (sctx , c .makeKey (hash ), f ); err != nil {
243
235
c .putS3Error .Add (1 )
244
236
c .logf ("[s3] put %q failed: %v" , name , err )
245
237
} else {
0 commit comments