v.io/x/ref/lib/stats: Use verror instead of fmt.Errorf or errors.New
This change replaces uses of fmt.Errorf and errors.New in lib/stats/...
with verror, and fixes up the dependencies.
The format strings are largely the same:
verror.NoExist is used instead of stats.ErrNotFound, and
stats.ErrNoValue (from services/mgmt/stats) is used instead of stats.ErrNoValue
Tested:
cd v.io
v23 go test ./...
v23 test run vanadium-go-test
Change-Id: I8459ce235b6bbd6c551dbb9cdd45b2116970a8ef
diff --git a/lib/stats/glob.go b/lib/stats/glob.go
index 51b9a83..bcb2997 100644
--- a/lib/stats/glob.go
+++ b/lib/stats/glob.go
@@ -9,6 +9,7 @@
"sort"
"time"
+ "v.io/v23/verror"
"v.io/x/ref/lib/glob"
)
@@ -31,7 +32,7 @@
defer lock.RUnlock()
node := findNodeLocked(root, false)
if node == nil {
- return &GlobIterator{err: ErrNotFound}
+ return &GlobIterator{err: verror.New(verror.ErrNoExist, nil, root)}
}
var out []KeyValue
globStepLocked("", g, node, updatedSince, includeValues, &out)
diff --git a/lib/stats/histogram/histogram.go b/lib/stats/histogram/histogram.go
index 246a3aa..4277d6f 100644
--- a/lib/stats/histogram/histogram.go
+++ b/lib/stats/histogram/histogram.go
@@ -7,13 +7,19 @@
package histogram
import (
- "fmt"
"time"
+ "v.io/v23/verror"
"v.io/x/ref/lib/stats/counter"
"v.io/x/ref/services/mgmt/stats"
)
+const pkgPath = "v.io/x/ref/lib/stats/histogram"
+
+var (
+ errNoBucketForValue = verror.Register(pkgPath+".errNoBucketForValue", verror.NoRetry, "{1:}{2:} no bucket for value{:_}")
+)
+
// A Histogram accumulates values in the form of a histogram. The type of the
// values is int64, which is suitable for keeping track of things like RPC
// latency in milliseconds. New histogram objects should be obtained via the
@@ -192,5 +198,5 @@
}
min = b + 1
}
- return 0, fmt.Errorf("no bucket for value: %f", value)
+ return 0, verror.New(errNoBucketForValue, nil, value)
}
diff --git a/lib/stats/stats.go b/lib/stats/stats.go
index e5932b4..2bdc961 100644
--- a/lib/stats/stats.go
+++ b/lib/stats/stats.go
@@ -16,10 +16,12 @@
package stats
import (
- "errors"
"strings"
"sync"
"time"
+
+ mgmtstats "v.io/v23/services/mgmt/stats"
+ "v.io/v23/verror"
)
// StatsObject is the interface for objects stored in the stats repository.
@@ -36,10 +38,8 @@
}
var (
- lock sync.RWMutex
- repository *node // GUARDED_BY(lock)
- ErrNotFound = errors.New("name not found")
- ErrNoValue = errors.New("object has no value")
+ lock sync.RWMutex
+ repository *node // GUARDED_BY(lock)
)
func init() {
@@ -53,7 +53,7 @@
defer lock.RUnlock()
node := findNodeLocked(name, false)
if node == nil || node.object == nil {
- return nil, ErrNotFound
+ return nil, verror.New(verror.ErrNoExist, nil, name)
}
return node.object, nil
}
@@ -66,7 +66,7 @@
return 0, err
}
if obj == nil {
- return nil, ErrNoValue
+ return nil, verror.New(mgmtstats.ErrNoValue, nil, name)
}
return obj.Value(), nil
}
@@ -74,7 +74,7 @@
// Delete deletes a StatsObject and all its children, if any.
func Delete(name string) error {
if name == "" {
- return ErrNotFound
+ return verror.New(verror.ErrNoExist, nil, name)
}
elems := strings.Split(name, "/")
last := len(elems) - 1
@@ -83,7 +83,7 @@
defer lock.Unlock()
parent := findNodeLocked(dirname, false)
if parent == nil {
- return ErrNotFound
+ return verror.New(verror.ErrNoExist, nil, name)
}
delete(parent.children, basename)
return nil
diff --git a/lib/stats/stats_test.go b/lib/stats/stats_test.go
index 60aa37d..be5f3ed 100644
--- a/lib/stats/stats_test.go
+++ b/lib/stats/stats_test.go
@@ -9,6 +9,7 @@
"testing"
"time"
+ "v.io/v23/verror"
libstats "v.io/x/ref/lib/stats"
"v.io/x/ref/lib/stats/counter"
"v.io/x/ref/lib/stats/histogram"
@@ -49,11 +50,11 @@
t.Errorf("unexpected result. Got %v, want %v", got, expected)
}
- if _, err := libstats.Value(""); err != libstats.ErrNotFound {
- t.Errorf("expected error, got err=%v", err)
+ if _, err := libstats.Value(""); verror.ErrorID(err) != verror.ErrNoExist.ID {
+ t.Errorf("expected error %s, got err=%s", verror.ErrNoExist.ID, verror.ErrorID(err))
}
- if _, err := libstats.Value("does/not/exist"); err != libstats.ErrNotFound {
- t.Errorf("expected error, got err=%v", err)
+ if _, err := libstats.Value("does/not/exist"); verror.ErrorID(err) != verror.ErrNoExist.ID {
+ t.Errorf("expected error %s, got err=%s", verror.ErrNoExist.ID, verror.ErrorID(err))
}
root := libstats.NewInteger("")
@@ -376,16 +377,16 @@
if err := libstats.Delete("a/b/c/d"); err != nil {
t.Errorf("unexpected error value: %v", err)
}
- if _, err := libstats.GetStatsObject("a/b/c/d"); err != libstats.ErrNotFound {
- t.Errorf("unexpected error value: Got %v, want %v", err, libstats.ErrNotFound)
+ if _, err := libstats.GetStatsObject("a/b/c/d"); verror.ErrorID(err) != verror.ErrNoExist.ID {
+ t.Errorf("unexpected error value: Got %v, want %v", verror.ErrorID(err), verror.ErrNoExist.ID)
}
if err := libstats.Delete("a/b"); err != nil {
t.Errorf("unexpected error value: %v", err)
}
- if _, err := libstats.GetStatsObject("a/b"); err != libstats.ErrNotFound {
- t.Errorf("unexpected error value: Got %v, want %v", err, libstats.ErrNotFound)
+ if _, err := libstats.GetStatsObject("a/b"); verror.ErrorID(err) != verror.ErrNoExist.ID {
+ t.Errorf("unexpected error value: Got %v, want %v", verror.ErrorID(err), verror.ErrNoExist.ID)
}
- if _, err := libstats.GetStatsObject("a/b/c"); err != libstats.ErrNotFound {
- t.Errorf("unexpected error value: Got %v, want %v", err, libstats.ErrNotFound)
+ if _, err := libstats.GetStatsObject("a/b/c"); verror.ErrorID(err) != verror.ErrNoExist.ID {
+ t.Errorf("unexpected error value: Got %v, want %v", verror.ErrorID(err), verror.ErrNoExist.ID)
}
}