TBR namespace: ResolveX/ResolveToMountTableX become Resolve/ResolveToMountTable.
This change goes with the wspr change https://vanadium-review.googlesource.com/#/c/1928/
Change-Id: I32946684530ab02e6e74b7380746490308982c34
diff --git a/runtimes/google/ipc/client.go b/runtimes/google/ipc/client.go
index 596f736..2199a8d 100644
--- a/runtimes/google/ipc/client.go
+++ b/runtimes/google/ipc/client.go
@@ -398,8 +398,8 @@
var servers []string
var pattern security.BlessingPattern
- if resolved, err := c.ns.ResolveX(ctx, name, resolveOpts...); err != nil {
- vlog.Errorf("ResolveX: %v", err)
+ if resolved, err := c.ns.Resolve(ctx, name, resolveOpts...); err != nil {
+ vlog.Errorf("Resolve: %v", err)
if verror.Is(err, naming.ErrNoSuchName.ID) {
return nil, verror.RetryRefetch, verror.Make(verror.NoServers, ctx, name)
}
diff --git a/runtimes/google/ipc/client_test.go b/runtimes/google/ipc/client_test.go
index a124355..e44b5bb 100644
--- a/runtimes/google/ipc/client_test.go
+++ b/runtimes/google/ipc/client_test.go
@@ -98,7 +98,7 @@
}
func numServers(t *testing.T, name string) int {
- me, err := veyron2.GetNamespace(gctx).ResolveX(gctx, name)
+ me, err := veyron2.GetNamespace(gctx).Resolve(gctx, name)
if err != nil {
return 0
}
diff --git a/runtimes/google/ipc/full_test.go b/runtimes/google/ipc/full_test.go
index 3db30e5..e8d702d 100644
--- a/runtimes/google/ipc/full_test.go
+++ b/runtimes/google/ipc/full_test.go
@@ -233,7 +233,7 @@
}
func verifyMount(t *testing.T, ns naming.Namespace, name string) []string {
- me, err := ns.ResolveX(testContext(), name)
+ me, err := ns.Resolve(testContext(), name)
if err != nil {
t.Errorf("%s: %s not found in mounttable", loc(1), name)
return nil
@@ -242,7 +242,7 @@
}
func verifyMountMissing(t *testing.T, ns naming.Namespace, name string) {
- if me, err := ns.ResolveX(testContext(), name); err == nil {
+ if me, err := ns.Resolve(testContext(), name); err == nil {
names := me.Names()
t.Errorf("%s: %s not supposed to be found in mounttable; got %d servers instead: %v", loc(1), name, len(names), names)
}
@@ -280,7 +280,7 @@
// It must return a name since it'll be passed to StartCall.
func fakeWSName(ns naming.Namespace, name string) (string, error) {
// Find the ws endpoint and use that.
- me, err := ns.ResolveX(testContext(), name)
+ me, err := ns.Resolve(testContext(), name)
if err != nil {
return "", err
}
diff --git a/runtimes/google/ipc/server.go b/runtimes/google/ipc/server.go
index e6afaed..d6df99b 100644
--- a/runtimes/google/ipc/server.go
+++ b/runtimes/google/ipc/server.go
@@ -155,7 +155,7 @@
if s.ns != nil {
var entry *naming.MountEntry
var err error
- if entry, err = s.ns.ResolveX(s.ctx, address); err != nil {
+ if entry, err = s.ns.Resolve(s.ctx, address); err != nil {
return "", err
}
names = entry.Names()
diff --git a/runtimes/google/ipc/server_test.go b/runtimes/google/ipc/server_test.go
index 1f362be..b71aed9 100644
--- a/runtimes/google/ipc/server_test.go
+++ b/runtimes/google/ipc/server_test.go
@@ -198,7 +198,7 @@
waitfor := func(expect int) {
then := time.Now().Add(time.Minute)
for {
- me, err := ns.ResolveX(testContext(), name)
+ me, err := ns.Resolve(testContext(), name)
if err == nil && len(me.Servers) == expect {
close(ch)
return
@@ -268,7 +268,7 @@
}
for {
- if _, err := ns.ResolveX(testContext(), name); err != nil {
+ if _, err := ns.Resolve(testContext(), name); err != nil {
break
}
time.Sleep(10 * time.Millisecond)
diff --git a/runtimes/google/lib/publisher/publisher.go b/runtimes/google/lib/publisher/publisher.go
index c5d35ed..5ccf6e7 100644
--- a/runtimes/google/lib/publisher/publisher.go
+++ b/runtimes/google/lib/publisher/publisher.go
@@ -342,7 +342,7 @@
func (ps *pubState) published() []string {
var ret []string
for name, _ := range ps.names {
- e, err := ps.ns.ResolveToMountTableX(ps.ctx, name)
+ e, err := ps.ns.ResolveToMountTable(ps.ctx, name)
if err != nil {
vlog.Errorf("ipc pub: couldn't resolve %v to mount table: %v", name, err)
continue
diff --git a/runtimes/google/lib/publisher/publisher_test.go b/runtimes/google/lib/publisher/publisher_test.go
index c0d0c4d..a947799 100644
--- a/runtimes/google/lib/publisher/publisher_test.go
+++ b/runtimes/google/lib/publisher/publisher_test.go
@@ -28,11 +28,11 @@
}
func resolve(t *testing.T, ns naming.Namespace, name string) []string {
- servers, err := ns.Resolve(testContext(), name)
+ me, err := ns.Resolve(testContext(), name)
if err != nil {
t.Fatalf("failed to resolve %q", name)
}
- return servers
+ return me.Names()
}
func TestAddAndRemove(t *testing.T) {
diff --git a/runtimes/google/naming/namespace/all_test.go b/runtimes/google/naming/namespace/all_test.go
index 406a884..ad898a7 100644
--- a/runtimes/google/naming/namespace/all_test.go
+++ b/runtimes/google/naming/namespace/all_test.go
@@ -149,19 +149,19 @@
}
func testResolveToMountTable(t *testing.T, ctx *context.T, ns naming.Namespace, name string, want ...string) {
- doResolveTest(t, "ResolveToMountTable", ns.ResolveToMountTableX, ctx, name, want)
+ doResolveTest(t, "ResolveToMountTable", ns.ResolveToMountTable, ctx, name, want)
}
func testResolveToMountTableWithPattern(t *testing.T, ctx *context.T, ns naming.Namespace, name string, pattern naming.ResolveOpt, want ...string) {
- doResolveTest(t, "ResolveToMountTable", ns.ResolveToMountTableX, ctx, name, want, pattern)
+ doResolveTest(t, "ResolveToMountTable", ns.ResolveToMountTable, ctx, name, want, pattern)
}
func testResolve(t *testing.T, ctx *context.T, ns naming.Namespace, name string, want ...string) {
- doResolveTest(t, "Resolve", ns.ResolveX, ctx, name, want)
+ doResolveTest(t, "Resolve", ns.Resolve, ctx, name, want)
}
func testResolveWithPattern(t *testing.T, ctx *context.T, ns naming.Namespace, name string, pattern naming.ResolveOpt, want ...string) {
- doResolveTest(t, "Resolve", ns.ResolveX, ctx, name, want, pattern)
+ doResolveTest(t, "Resolve", ns.Resolve, ctx, name, want, pattern)
}
type serverEntry struct {
@@ -562,7 +562,7 @@
for i := 0; i < 40; i++ {
cycle += "/c3/c4"
}
- if _, err := ns.ResolveX(c, "c1/"+cycle); !verror.Is(err, naming.ErrResolutionDepthExceeded.ID) {
+ if _, err := ns.Resolve(c, "c1/"+cycle); !verror.Is(err, naming.ErrResolutionDepthExceeded.ID) {
boom(t, "Failed to detect cycle")
}
diff --git a/runtimes/google/naming/namespace/mount.go b/runtimes/google/naming/namespace/mount.go
index 9b7d186..66bf6d0 100644
--- a/runtimes/google/naming/namespace/mount.go
+++ b/runtimes/google/naming/namespace/mount.go
@@ -85,10 +85,11 @@
// dispatch executes f in parallel for each mount table implementing mTName.
func (ns *namespace) dispatch(ctx *context.T, mTName string, f func(*context.T, string, string) status) error {
// Resolve to all the mount tables implementing name.
- mts, err := ns.ResolveToMountTable(ctx, mTName)
+ me, err := ns.ResolveToMountTable(ctx, mTName)
if err != nil {
return err
}
+ mts := me.Names()
// Apply f to each of the returned mount tables.
c := make(chan status, len(mts))
for _, mt := range mts {
diff --git a/runtimes/google/naming/namespace/resolve.go b/runtimes/google/naming/namespace/resolve.go
index 5c2d26a..97f8e9b 100644
--- a/runtimes/google/naming/namespace/resolve.go
+++ b/runtimes/google/naming/namespace/resolve.go
@@ -68,14 +68,14 @@
return len(e.Name) == 0
}
-// ResolveX implements veyron2/naming.Namespace.
-func (ns *namespace) ResolveX(ctx *context.T, name string, opts ...naming.ResolveOpt) (*naming.MountEntry, error) {
+// Resolve implements veyron2/naming.Namespace.
+func (ns *namespace) Resolve(ctx *context.T, name string, opts ...naming.ResolveOpt) (*naming.MountEntry, error) {
defer vlog.LogCall()()
e, _ := ns.rootMountEntry(name)
if vlog.V(2) {
_, file, line, _ := runtime.Caller(1)
- vlog.Infof("ResolveX(%s) called from %s:%d", name, file, line)
- vlog.Infof("ResolveX(%s) -> rootMountEntry %v", name, *e)
+ vlog.Infof("Resolve(%s) called from %s:%d", name, file, line)
+ vlog.Infof("Resolve(%s) -> rootMountEntry %v", name, *e)
}
if skipResolve(opts) {
return e, nil
@@ -93,9 +93,9 @@
}
// Iterate walking through mount table servers.
for remaining := ns.maxResolveDepth; remaining > 0; remaining-- {
- vlog.VI(2).Infof("ResolveX(%s) loop %v", name, *e)
+ vlog.VI(2).Infof("Resolve(%s) loop %v", name, *e)
if !e.ServesMountTable() || terminal(e) {
- vlog.VI(1).Infof("ResolveX(%s) -> %v", name, *e)
+ vlog.VI(1).Infof("Resolve(%s) -> %v", name, *e)
return e, nil
}
var err error
@@ -104,13 +104,13 @@
// Lots of reasons why another error can happen. We are trying
// to single out "this isn't a mount table".
if notAnMT(err) {
- vlog.VI(1).Infof("ResolveX(%s) -> %v", name, curr)
+ vlog.VI(1).Infof("Resolve(%s) -> %v", name, curr)
return curr, nil
}
if verror.Is(err, naming.ErrNoSuchNameRoot.ID) {
err = verror.Make(naming.ErrNoSuchName, ctx, name)
}
- vlog.VI(1).Infof("ResolveX(%s) -> (%s: %v)", err, name, curr)
+ vlog.VI(1).Infof("Resolve(%s) -> (%s: %v)", err, name, curr)
return nil, err
}
pattern = ""
@@ -118,24 +118,14 @@
return nil, verror.Make(naming.ErrResolutionDepthExceeded, ctx)
}
-// Resolve implements veyron2/naming.Namespace.
-func (ns *namespace) Resolve(ctx *context.T, name string, opts ...naming.ResolveOpt) ([]string, error) {
- defer vlog.LogCall()()
- e, err := ns.ResolveX(ctx, name, opts...)
- if err != nil {
- return nil, err
- }
- return e.Names(), nil
-}
-
-// ResolveToMountTableX implements veyron2/naming.Namespace.
-func (ns *namespace) ResolveToMountTableX(ctx *context.T, name string, opts ...naming.ResolveOpt) (*naming.MountEntry, error) {
+// ResolveToMountTable implements veyron2/naming.Namespace.
+func (ns *namespace) ResolveToMountTable(ctx *context.T, name string, opts ...naming.ResolveOpt) (*naming.MountEntry, error) {
defer vlog.LogCall()()
e, _ := ns.rootMountEntry(name)
if vlog.V(2) {
_, file, line, _ := runtime.Caller(1)
- vlog.Infof("ResolveToMountTableX(%s) called from %s:%d", name, file, line)
- vlog.Infof("ResolveToMountTableX(%s) -> rootNames %v", name, e)
+ vlog.Infof("ResolveToMountTable(%s) called from %s:%d", name, file, line)
+ vlog.Infof("ResolveToMountTable(%s) -> rootNames %v", name, e)
}
if len(e.Servers) == 0 {
return nil, verror.Make(naming.ErrNoMountTable, ctx)
@@ -144,33 +134,33 @@
client := veyron2.GetClient(ctx)
last := e
for remaining := ns.maxResolveDepth; remaining > 0; remaining-- {
- vlog.VI(2).Infof("ResolveToMountTableX(%s) loop %v", name, e)
+ vlog.VI(2).Infof("ResolveToMountTable(%s) loop %v", name, e)
var err error
curr := e
// If the next name to resolve doesn't point to a mount table, we're done.
if !e.ServesMountTable() || terminal(e) {
- vlog.VI(1).Infof("ResolveToMountTableX(%s) -> %v", name, last)
+ vlog.VI(1).Infof("ResolveToMountTable(%s) -> %v", name, last)
return last, nil
}
if e, err = ns.resolveAgainstMountTable(ctx, client, e, pattern); err != nil {
if verror.Is(err, naming.ErrNoSuchNameRoot.ID) {
- vlog.VI(1).Infof("ResolveToMountTableX(%s) -> %v (NoSuchRoot: %v)", name, last, curr)
+ vlog.VI(1).Infof("ResolveToMountTable(%s) -> %v (NoSuchRoot: %v)", name, last, curr)
return last, nil
}
if verror.Is(err, naming.ErrNoSuchName.ID) {
- vlog.VI(1).Infof("ResolveToMountTableX(%s) -> %v (NoSuchName: %v)", name, curr, curr)
+ vlog.VI(1).Infof("ResolveToMountTable(%s) -> %v (NoSuchName: %v)", name, curr, curr)
return curr, nil
}
// Lots of reasons why another error can happen. We are trying
// to single out "this isn't a mount table".
if notAnMT(err) {
- vlog.VI(1).Infof("ResolveToMountTableX(%s) -> %v", name, last)
+ vlog.VI(1).Infof("ResolveToMountTable(%s) -> %v", name, last)
return last, nil
}
// TODO(caprita): If the server is unreachable for
// example, we may still want to return its parent
// mounttable rather than an error.
- vlog.VI(1).Infof("ResolveToMountTableX(%s) -> %v", name, err)
+ vlog.VI(1).Infof("ResolveToMountTable(%s) -> %v", name, err)
return nil, err
}
last = curr
@@ -179,16 +169,6 @@
return nil, verror.Make(naming.ErrResolutionDepthExceeded, ctx)
}
-// ResolveToMountTable implements veyron2/naming.Namespace.
-func (ns *namespace) ResolveToMountTable(ctx *context.T, name string, opts ...naming.ResolveOpt) ([]string, error) {
- defer vlog.LogCall()()
- e, err := ns.ResolveToMountTableX(ctx, name, opts...)
- if err != nil {
- return nil, err
- }
- return e.Names(), nil
-}
-
// FlushCache flushes the most specific entry found for name. It returns true if anything was
// actually flushed.
func (ns *namespace) FlushCacheEntry(name string) bool {
diff --git a/runtimes/google/testing/mocks/naming/namespace.go b/runtimes/google/testing/mocks/naming/namespace.go
index c46eca8..ad9a139 100644
--- a/runtimes/google/testing/mocks/naming/namespace.go
+++ b/runtimes/google/testing/mocks/naming/namespace.go
@@ -65,29 +65,9 @@
return nil
}
-func (ns *namespace) Resolve(ctx *context.T, name string, opts ...naming.ResolveOpt) ([]string, error) {
+func (ns *namespace) Resolve(ctx *context.T, name string, opts ...naming.ResolveOpt) (*naming.MountEntry, error) {
defer vlog.LogCall()()
- if address, _ := naming.SplitAddressName(name); len(address) > 0 {
- return []string{name}, nil
- }
- ns.Lock()
- defer ns.Unlock()
- for prefix, servers := range ns.mounts {
- if strings.HasPrefix(name, prefix) {
- suffix := strings.TrimLeft(strings.TrimPrefix(name, prefix), "/")
- var ret []string
- for _, s := range servers {
- ret = append(ret, naming.JoinAddressName(s, suffix))
- }
- return ret, nil
- }
- }
- return nil, verror.Make(naming.ErrNoSuchName, ctx, fmt.Sprintf("Resolve name %q not found in %v", name, ns.mounts))
-}
-
-func (ns *namespace) ResolveX(ctx *context.T, name string, opts ...naming.ResolveOpt) (*naming.MountEntry, error) {
- defer vlog.LogCall()()
- e, err := ns.ns.ResolveX(ctx, name, options.NoResolve{})
+ e, err := ns.ns.Resolve(ctx, name, options.NoResolve{})
if err != nil {
return e, err
}
@@ -111,14 +91,7 @@
return nil, verror.Make(naming.ErrNoSuchName, ctx, fmt.Sprintf("Resolve name %q not found in %v", name, ns.mounts))
}
-func (ns *namespace) ResolveToMountTableX(ctx *context.T, name string, opts ...naming.ResolveOpt) (*naming.MountEntry, error) {
- defer vlog.LogCall()()
- // TODO(mattr): Implement this method for tests that might need it.
- panic("ResolveToMountTable not implemented")
- return nil, nil
-}
-
-func (ns *namespace) ResolveToMountTable(ctx *context.T, name string, opts ...naming.ResolveOpt) ([]string, error) {
+func (ns *namespace) ResolveToMountTable(ctx *context.T, name string, opts ...naming.ResolveOpt) (*naming.MountEntry, error) {
defer vlog.LogCall()()
// TODO(mattr): Implement this method for tests that might need it.
panic("ResolveToMountTable not implemented")
diff --git a/services/mgmt/device/impl/util_test.go b/services/mgmt/device/impl/util_test.go
index dd072de..4d8be6d 100644
--- a/services/mgmt/device/impl/util_test.go
+++ b/services/mgmt/device/impl/util_test.go
@@ -45,8 +45,8 @@
// resolveExpectNotFound verifies that the given name is not in the mounttable.
func resolveExpectNotFound(t *testing.T, name string) {
- if results, err := veyron2.GetNamespace(globalCtx).Resolve(globalCtx, name); err == nil {
- t.Fatalf(testutil.FormatLogLine(2, "Resolve(%v) succeeded with results %v when it was expected to fail", name, results))
+ if me, err := veyron2.GetNamespace(globalCtx).Resolve(globalCtx, name); err == nil {
+ t.Fatalf(testutil.FormatLogLine(2, "Resolve(%v) succeeded with results %v when it was expected to fail", name, me.Names()))
} else if expectErr := naming.ErrNoSuchName.ID; !verror2.Is(err, expectErr) {
t.Fatalf(testutil.FormatLogLine(2, "Resolve(%v) failed with error %v, expected error ID %v", name, err, expectErr))
}
@@ -54,13 +54,13 @@
// resolve looks up the given name in the mounttable.
func resolve(t *testing.T, name string, replicas int) []string {
- results, err := veyron2.GetNamespace(globalCtx).Resolve(globalCtx, name)
+ me, err := veyron2.GetNamespace(globalCtx).Resolve(globalCtx, name)
if err != nil {
t.Fatalf("Resolve(%v) failed: %v", name, err)
}
filteredResults := []string{}
- for _, r := range results {
+ for _, r := range me.Names() {
if strings.Index(r, "@tcp") != -1 {
filteredResults = append(filteredResults, r)
}
diff --git a/services/mounttable/lib/neighborhood_test.go b/services/mounttable/lib/neighborhood_test.go
index 7b48e53..6f197d6 100644
--- a/services/mounttable/lib/neighborhood_test.go
+++ b/services/mounttable/lib/neighborhood_test.go
@@ -83,13 +83,13 @@
client := veyron2.GetClient(rootCtx)
name := naming.JoinAddressName(estr, serverName+"/"+expectedSuffix)
- call, cerr := client.StartCall(rootCtx, name, "ResolveStepX", nil, options.NoResolve{})
+ call, cerr := client.StartCall(rootCtx, name, "ResolveStep", nil, options.NoResolve{})
if cerr != nil {
- boom(t, "ResolveStepX.StartCall: %s", cerr)
+ boom(t, "ResolveStep.StartCall: %s", cerr)
}
var entry naming.VDLMountEntry
if cerr = call.Finish(&entry, &err); cerr != nil {
- boom(t, "ResolveStepX: %s", cerr)
+ boom(t, "ResolveStep: %s", cerr)
}
// Resolution returned something. Make sure its correct.
diff --git a/tools/namespace/impl.go b/tools/namespace/impl.go
index b2df4db..cae7c40 100644
--- a/tools/namespace/impl.go
+++ b/tools/namespace/impl.go
@@ -145,12 +145,12 @@
ns := veyron2.GetNamespace(ctx)
- servers, err := ns.Resolve(ctx, name)
+ me, err := ns.Resolve(ctx, name)
if err != nil {
vlog.Infof("ns.Resolve(%q) failed: %v", name, err)
return err
}
- for _, s := range servers {
+ for _, s := range me.Names() {
fmt.Fprintln(cmd.Stdout(), s)
}
return nil
@@ -176,9 +176,9 @@
ns := veyron2.GetNamespace(ctx)
- e, err := ns.ResolveToMountTableX(ctx, name)
+ e, err := ns.ResolveToMountTable(ctx, name)
if err != nil {
- vlog.Infof("ns.ResolveToMountTableX(%q) failed: %v", name, err)
+ vlog.Infof("ns.ResolveToMountTable(%q) failed: %v", name, err)
return err
}
for _, s := range e.Servers {
diff --git a/tools/naming/simulator/shell_functions.go b/tools/naming/simulator/shell_functions.go
index 396fe6d..552635b 100644
--- a/tools/naming/simulator/shell_functions.go
+++ b/tools/naming/simulator/shell_functions.go
@@ -87,18 +87,19 @@
return nil
}
-type resolver func(ctx *context.T, name string, opts ...naming.ResolveOpt) (names []string, err error)
+type resolver func(ctx *context.T, name string, opts ...naming.ResolveOpt) (me *naming.MountEntry, err error)
func resolve(fn resolver, stdin io.Reader, stdout, stderr io.Writer, env map[string]string, args ...string) error {
if err := checkArgs(args[1:], 1, "<name>"); err != nil {
return err
}
name := args[1]
- servers, err := fn(ctx, name)
+ me, err := fn(ctx, name)
if err != nil {
fmt.Fprintf(stdout, "RN=0\n")
return err
}
+ servers := me.Names()
fmt.Fprintf(stdout, "RN=%d\n", len(servers))
for i, s := range servers {
fmt.Fprintf(stdout, "R%d=%s\n", i, s)