core: Refactor vtrace to allow starting new traces from user code.

Also update to follow the new Set/Get naming convention.

Change-Id: Idd906af0af50168c7184ad2373725f12497e7f92
MultiPart: 2/2
diff --git a/services/mgmt/debug/dispatcher.go b/services/mgmt/debug/dispatcher.go
index fd85e5c..02d10bb 100644
--- a/services/mgmt/debug/dispatcher.go
+++ b/services/mgmt/debug/dispatcher.go
@@ -6,7 +6,6 @@
 
 	"v.io/core/veyron2/ipc"
 	"v.io/core/veyron2/security"
-	"v.io/core/veyron2/vtrace"
 
 	logreaderimpl "v.io/core/veyron/services/mgmt/logreader/impl"
 	pprofimpl "v.io/core/veyron/services/mgmt/pprof/impl"
@@ -18,13 +17,12 @@
 type dispatcher struct {
 	logsDir string // The root of the logs directory.
 	auth    security.Authorizer
-	store   vtrace.Store
 }
 
 var _ ipc.Dispatcher = (*dispatcher)(nil)
 
-func NewDispatcher(logsDir string, authorizer security.Authorizer, store vtrace.Store) *dispatcher {
-	return &dispatcher{logsDir, authorizer, store}
+func NewDispatcher(logsDir string, authorizer security.Authorizer) *dispatcher {
+	return &dispatcher{logsDir, authorizer}
 }
 
 // The first part of the names of the objects served by this dispatcher.
@@ -57,7 +55,7 @@
 	case "stats":
 		return statsimpl.NewStatsService(suffix, 10*time.Second), d.auth, nil
 	case "vtrace":
-		return vtraceimpl.NewVtraceService(d.store), d.auth, nil
+		return vtraceimpl.NewVtraceService(), d.auth, nil
 	}
 	return nil, d.auth, nil
 }
diff --git a/services/mgmt/debug/dispatcher_test.go b/services/mgmt/debug/dispatcher_test.go
index dac56ab..3c2c3a7 100644
--- a/services/mgmt/debug/dispatcher_test.go
+++ b/services/mgmt/debug/dispatcher_test.go
@@ -33,7 +33,7 @@
 	if len(logsDir) == 0 {
 		return "", nil, fmt.Errorf("logs directory missing")
 	}
-	disp := NewDispatcher(logsDir, nil, rt.VtraceStore())
+	disp := NewDispatcher(logsDir, nil)
 	server, err := rt.NewServer()
 	if err != nil {
 		return "", nil, fmt.Errorf("failed to start debug server: %v", err)
@@ -58,7 +58,7 @@
 
 	tracedContext := func() *context.T {
 		ctx := runtime.NewContext()
-		vtrace.FromContext(ctx).Trace().ForceCollect()
+		vtrace.ForceCollect(ctx)
 		return ctx
 	}
 	rootName = "debug"
diff --git a/services/mgmt/vtrace/impl/vtrace.go b/services/mgmt/vtrace/impl/vtrace.go
index 9c56e7e..3aa22dd 100644
--- a/services/mgmt/vtrace/impl/vtrace.go
+++ b/services/mgmt/vtrace/impl/vtrace.go
@@ -8,12 +8,11 @@
 	"v.io/core/veyron2/vtrace"
 )
 
-type vtraceService struct {
-	store vtrace.Store
-}
+type vtraceService struct{}
 
 func (v *vtraceService) Trace(ctx ipc.ServerContext, id uniqueid.ID) (vtrace.TraceRecord, error) {
-	tr := v.store.TraceRecord(id)
+	store := vtrace.GetStore(ctx.Context())
+	tr := store.TraceRecord(id)
 	if tr == nil {
 		return vtrace.TraceRecord{}, verror2.Make(verror2.NoExist, ctx.Context(), "No trace with id %x", id)
 	}
@@ -23,7 +22,8 @@
 func (v *vtraceService) AllTraces(ctx svtrace.StoreAllTracesContext) error {
 	// TODO(mattr): Consider changing the store to allow us to iterate through traces
 	// when there are many.
-	traces := v.store.TraceRecords()
+	store := vtrace.GetStore(ctx.Context())
+	traces := store.TraceRecords()
 	for i := range traces {
 		if err := ctx.SendStream().Send(traces[i]); err != nil {
 			return err
@@ -32,6 +32,6 @@
 	return nil
 }
 
-func NewVtraceService(store vtrace.Store) interface{} {
-	return svtrace.StoreServer(&vtraceService{store})
+func NewVtraceService() interface{} {
+	return svtrace.StoreServer(&vtraceService{})
 }
diff --git a/services/mgmt/vtrace/impl/vtrace_test.go b/services/mgmt/vtrace/impl/vtrace_test.go
index a7e21c8..bf77a95 100644
--- a/services/mgmt/vtrace/impl/vtrace_test.go
+++ b/services/mgmt/vtrace/impl/vtrace_test.go
@@ -29,7 +29,7 @@
 	if err != nil {
 		t.Fatalf("Listen failed: %s", err)
 	}
-	if err := server.Serve("", impl.NewVtraceService(runtime.VtraceStore()), nil); err != nil {
+	if err := server.Serve("", impl.NewVtraceService(), nil); err != nil {
 		t.Fatalf("Serve failed: %s", err)
 	}
 	return endpoints[0].String(), server, runtime
@@ -40,10 +40,10 @@
 	defer server.Stop()
 
 	sctx := runtime.NewContext()
-	sctx, span := runtime.WithNewSpan(sctx, "The Span")
-	span.Trace().ForceCollect()
+	sctx, span := vtrace.SetNewSpan(sctx, "The Span")
+	vtrace.ForceCollect(sctx)
 	span.Finish()
-	id := span.Trace().ID()
+	id := span.Trace()
 
 	client := service.StoreClient(naming.JoinAddressName(endpoint, ""))