/
uniform_client.go
75 lines (64 loc) · 1.82 KB
/
uniform_client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package obj
import (
"context"
"io"
"strings"
"github.com/pachyderm/pachyderm/v2/src/internal/errors"
"github.com/pachyderm/pachyderm/v2/src/internal/log"
"github.com/pachyderm/pachyderm/v2/src/internal/pacherr"
"go.uber.org/zap"
)
var _ Client = &uniformClient{}
// uniformClient is for ensuring uniform behavior across all the object clients
type uniformClient struct {
c Client
}
func newUniformClient(c Client) Client {
return &uniformClient{c: c}
}
func (uc *uniformClient) Put(ctx context.Context, name string, r io.Reader) (retErr error) {
defer func() {
retErr = errors.EnsureStack(retErr)
}()
name = strings.Trim(name, "/")
return errors.EnsureStack(uc.c.Put(ctx, name, r))
}
func (cc *uniformClient) Get(ctx context.Context, name string, w io.Writer) (retErr error) {
defer func() {
retErr = errors.EnsureStack(retErr)
}()
name = strings.Trim(name, "/")
return errors.EnsureStack(cc.c.Get(ctx, name, w))
}
func (cc *uniformClient) Delete(ctx context.Context, name string) (retErr error) {
defer func() {
retErr = errors.EnsureStack(retErr)
}()
name = strings.Trim(name, "/")
err := cc.c.Delete(ctx, name)
if pacherr.IsNotExist(err) {
err = nil
}
return err
}
func (cc *uniformClient) Walk(ctx context.Context, prefix string, fn func(name string) error) (retErr error) {
defer func() {
retErr = errors.EnsureStack(retErr)
}()
return errors.EnsureStack(cc.c.Walk(ctx, prefix, fn))
}
func (uc *uniformClient) Exists(ctx context.Context, p string) (_ bool, retErr error) {
defer func() {
retErr = errors.EnsureStack(retErr)
}()
exists, err := uc.c.Exists(ctx, p)
if pacherr.IsNotExist(err) {
log.Info(ctx, "obj.Client Exists returned not exist error", zap.Error(err))
exists = false
err = nil
}
return exists, err
}
func (uc *uniformClient) BucketURL() ObjectStoreURL {
return uc.c.BucketURL()
}