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, ""))