namesys: async: go vet fixes
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
Łukasz Magiera committed
Aug 28, 2018 at 01:06 UTC
6adb15f4fb3c2bc64207972339f4f0a32b1cf834
5 files changed
+36
-16
core/corehttp/gateway_test.go
+9
-1
@@ -35,7 +35,7 @@ type mockNamesys map[string]path.Path
35
func (m mockNamesys) Resolve(ctx context.Context, name string, opts ...nsopts.ResolveOpt) (value path.Path, err error) {
36
cfg := nsopts.DefaultResolveOpts()
37
for _, o := range opts {
38
- o(cfg)
38
+ o(&cfg)
39
}
40
depth := cfg.Depth
41
if depth == nsopts.UnlimitedDepth {
@@ -57,6 +57,14 @@ func (m mockNamesys) Resolve(ctx context.Context, name string, opts ...nsopts.Re
57
return value, nil
58
}
59
60
+func (m mockNamesys) ResolveAsync(ctx context.Context, name string, opts ...nsopts.ResolveOpt) <-chan namesys.Result {
61
+ out := make(chan namesys.Result, 1)
62
+ v, err := m.Resolve(ctx, name, opts...)
63
+ out <- namesys.Result{Path: v, Err: err}
64
+ close(out)
65
+ return nil
66
+}
67
+
68
func (m mockNamesys) Publish(ctx context.Context, name ci.PrivKey, value path.Path) error {
69
return errors.New("not implemented for mockNamesys")
70
}
namesys/base.go
+14
-10
@@ -68,23 +68,24 @@ func resolveAsyncDo(ctx context.Context, r resolver, name string, options opts.R
68
for {
69
select {
70
case res, ok := <-resCh:
71
- if res.err != nil {
72
- outCh <- Result{err: res.err}
73
- return
74
- }
71
if !ok {
72
resCh = nil
73
continue
74
}
75
+
76
+ if res.err != nil {
77
+ outCh <- Result{Err: res.err}
78
+ return
79
+ }
80
log.Debugf("resolved %s to %s", name, res.value.String())
81
if strings.HasPrefix(res.value.String(), "/ipfs/") {
81
- outCh <- Result{err: res.err}
82
+ outCh <- Result{Err: res.err}
83
continue
84
}
85
p := strings.TrimPrefix(res.value.String(), prefix)
86
87
if depth == 1 {
87
- outCh <- Result{err: ErrResolveRecursion}
88
+ outCh <- Result{Err: ErrResolveRecursion}
89
continue
90
}
91
@@ -99,17 +100,20 @@ func resolveAsyncDo(ctx context.Context, r resolver, name string, options opts.R
100
cancelSub()
101
}
102
subCtx, cancelSub = context.WithCancel(ctx)
103
+ defer cancelSub()
104
105
subCh = resolveAsyncDo(subCtx, r, p, subopts, prefix)
106
case res, ok := <-subCh:
105
- if res.err != nil {
106
- outCh <- Result{err: res.err}
107
- return
108
- }
107
if !ok {
108
subCh = nil
109
continue
110
}
111
+
112
+ if res.Err != nil {
113
+ outCh <- Result{Err: res.Err}
114
+ return
115
+ }
116
+
117
outCh <- res
118
case <-ctx.Done():
119
}
namesys/dns.go
+6
-2
@@ -31,6 +31,10 @@ func (r *DNSResolver) Resolve(ctx context.Context, name string, options ...opts.
31
return resolve(ctx, r, name, opts.ProcessOpts(options), "/ipns/")
32
}
33
34
+func (r *DNSResolver) ResolveAsync(ctx context.Context, name string, options ...opts.ResolveOpt) <-chan Result {
35
+ return resolveAsync(ctx, r, name, opts.ProcessOpts(options), "/ipns/")
36
+}
37
+
38
type lookupRes struct {
39
path path.Path
40
error error
@@ -112,8 +116,8 @@ func (r *DNSResolver) resolveOnceAsync(ctx context.Context, name string, options
116
}
117
if subRes.error == nil {
118
select {
115
- case out <- onceResult{value: subRes.path}:
116
- case <-ctx.Done():
119
+ case out <- onceResult{value: subRes.path}:
120
+ case <-ctx.Done():
121
}
122
return
123
}
namesys/interface.go
+2
-2
@@ -65,8 +65,8 @@ type NameSystem interface {
65
66
// Result is the return type for Resolver.ResolveAsync.
67
type Result struct {
68
- path path.Path
69
- err error
68
+ Path path.Path
69
+ Err error
70
}
71
72
// Resolver is an object capable of resolving names.
namesys/namesys_test.go
+5
-1
@@ -38,11 +38,15 @@ func testResolution(t *testing.T, resolver Resolver, name string, depth uint, ex
38
}
39
}
40
41
-func (r *mockResolver) resolveOnce(ctx context.Context, name string, opts *opts.ResolveOpts) (path.Path, time.Duration, error) {
41
+func (r *mockResolver) resolveOnce(ctx context.Context, name string, opts opts.ResolveOpts) (path.Path, time.Duration, error) {
42
p, err := path.ParsePath(r.entries[name])
43
return p, 0, err
44
}
45
46
+func (r *mockResolver) resolveOnceAsync(ctx context.Context, name string, options opts.ResolveOpts) <-chan onceResult {
47
+ panic("stub")
48
+}
49
+
50
func mockResolverOne() *mockResolver {
51
return &mockResolver{
52
entries: map[string]string{