Skip to content

Commit f55ddda

Browse files
committed
Addressed review comments, especially around error message wording.
1 parent e637b9c commit f55ddda

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

resource/resourceadapters/charmstore.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,9 @@ func (client CSRetryClient) GetResource(req charmstore.ResourceRequest) (charmst
119119
var lastErr error
120120
args.NotifyFunc = func(err error, i int) {
121121
// Remember the error we're hiding and then retry!
122-
logger.Warningf("(attempt %d) retrying resource %q download from charm store [channel (%v), charm (%v), resource revision (%v)] due to error: %v",
123-
i, req.Name, req.Channel, req.Charm, req.Revision, err)
122+
logger.Warningf("attempt %d/%d to download resource %q from charm store [channel (%v), charm (%v), resource revision (%v)] failed with error (will retry): %v",
123+
i, client.retryArgs.Attempts, req.Name, req.Channel, req.Charm, req.Revision, err)
124+
logger.Tracef("resource get error stack: %v", errors.ErrorStack(err))
124125
lastErr = err
125126
}
126127

resource/resourceadapters/charmstore_test.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package resourceadapters_test
55

66
import (
77
"fmt"
8+
"sync/atomic"
89

910
"github.com/juju/errors"
1011
"github.com/juju/testing"
@@ -32,51 +33,52 @@ func (s *CharmStoreSuite) SetUpTest(c *gc.C) {
3233

3334
func (s *CharmStoreSuite) TestGetResourceTerminates(c *gc.C) {
3435
msg := "trust"
35-
attempts := 0
36+
attempts := int32(0)
3637
s.resourceClient.getResourceF = func(req charmstore.ResourceRequest) (data charmstore.ResourceData, err error) {
37-
attempts++
38+
atomic.AddInt32(&attempts, 1)
3839
return charmstore.ResourceData{}, errors.New(msg)
3940
}
4041
csRes := resourceadapters.NewCSRetryClientForTest(s.resourceClient)
4142

4243
_, err := csRes.GetResource(charmstore.ResourceRequest{})
4344
c.Assert(err, gc.ErrorMatches, fmt.Sprintf("failed after retrying: %v", msg))
4445
// Ensure we logged attempts @ WARNING.
45-
c.Assert(c.GetTestLog(), jc.Contains, fmt.Sprintf("WARNING juju.resource.resourceadapters (attempt %v) retrying resource ", attempts))
46+
c.Assert(c.GetTestLog(), jc.Contains, fmt.Sprintf("WARNING juju.resource.resourceadapters attempt %d/%d to download resource ", attempts, attempts))
4647

4748
callsMade := []string{}
48-
for i := 0; i < attempts; i++ {
49+
for i := int32(0); i < attempts; i++ {
4950
callsMade = append(callsMade, "GetResource")
5051
}
52+
c.Assert(attempts, jc.GreaterThan, 1)
5153
s.resourceClient.stub.CheckCallNames(c, callsMade...)
5254
}
5355

5456
func (s *CharmStoreSuite) TestGetResourceAbortedOnNotFound(c *gc.C) {
5557
msg := "trust"
56-
s.resourceClient.getResourceF = func(req charmstore.ResourceRequest) (data charmstore.ResourceData, err error) {
57-
return charmstore.ResourceData{}, errors.NotFoundf(msg)
58-
}
59-
s.assertAbortedGetResource(c,
58+
s.assertAbortedGetResourceOnError(c,
6059
resourceadapters.NewCSRetryClientForTest(s.resourceClient),
60+
errors.NotFoundf(msg),
6161
fmt.Sprintf("%v not found", msg),
6262
)
6363
}
6464

6565
func (s *CharmStoreSuite) TestGetResourceAbortedOnNotValid(c *gc.C) {
6666
msg := "trust"
67-
s.resourceClient.getResourceF = func(req charmstore.ResourceRequest) (data charmstore.ResourceData, err error) {
68-
return charmstore.ResourceData{}, errors.NotValidf(msg)
69-
}
70-
s.assertAbortedGetResource(c,
67+
s.assertAbortedGetResourceOnError(c,
7168
resourceadapters.NewCSRetryClientForTest(s.resourceClient),
69+
errors.NotValidf(msg),
7270
fmt.Sprintf("%v not valid", msg),
7371
)
7472
}
7573

76-
func (s *CharmStoreSuite) assertAbortedGetResource(c *gc.C, csRes *resourceadapters.CSRetryClient, expectedError string) {
74+
func (s *CharmStoreSuite) assertAbortedGetResourceOnError(c *gc.C, csRes *resourceadapters.CSRetryClient, expectedError error, expectedMessage string) {
75+
s.resourceClient.getResourceF = func(req charmstore.ResourceRequest) (data charmstore.ResourceData, err error) {
76+
return charmstore.ResourceData{}, expectedError
77+
}
7778
_, err := csRes.GetResource(charmstore.ResourceRequest{})
78-
c.Assert(err, gc.ErrorMatches, expectedError)
79+
c.Assert(err, gc.ErrorMatches, expectedMessage)
7980
c.Assert(c.GetTestLog(), gc.Not(jc.Contains), "WARNING juju.resource.resourceadapters")
81+
// Since we have aborted re-tries, we should only call GetResources once.
8082
s.resourceClient.stub.CheckCallNames(c, "GetResource")
8183
}
8284

0 commit comments

Comments
 (0)