You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2018/03/27 08:41:38 UTC
[incubator-servicecomb-service-center] branch master updated:
SCB-430 Wrong parentId in tracing data (#319)
This is an automated email from the ASF dual-hosted git repository.
littlecui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-service-center.git
The following commit(s) were added to refs/heads/master by this push:
new 39b9fd4 SCB-430 Wrong parentId in tracing data (#319)
39b9fd4 is described below
commit 39b9fd4bfe8db27940fcb4315c1ce7ade99f6ab7
Author: little-cui <su...@qq.com>
AuthorDate: Tue Mar 27 16:41:36 2018 +0800
SCB-430 Wrong parentId in tracing data (#319)
---
server/infra/tracing/tracing.go | 11 ++++
server/plugin/infra/registry/etcd/tracing.go | 23 ++------
server/plugin/infra/tracing/buildin/buildin.go | 61 ++++++++++++++++------
.../plugin/infra/tracing/buildin/file_collector.go | 5 +-
4 files changed, 63 insertions(+), 37 deletions(-)
diff --git a/server/infra/tracing/tracing.go b/server/infra/tracing/tracing.go
index 3e5d674..a7d855e 100644
--- a/server/infra/tracing/tracing.go
+++ b/server/infra/tracing/tracing.go
@@ -16,6 +16,11 @@
*/
package tracing
+import (
+ "github.com/apache/incubator-servicecomb-service-center/server/infra/registry"
+ "golang.org/x/net/context"
+)
+
const CTX_TRACE_SPAN = "x-trace-span"
type Request interface{}
@@ -27,3 +32,9 @@ type Tracing interface {
ClientBegin(operationName string, r Request) Span
ClientEnd(span Span, code int, message string)
}
+
+type RegistryRequest struct {
+ Ctx context.Context
+ Endpoint string
+ Options registry.PluginOp
+}
diff --git a/server/plugin/infra/registry/etcd/tracing.go b/server/plugin/infra/registry/etcd/tracing.go
index 72a38b0..2ac751f 100644
--- a/server/plugin/infra/registry/etcd/tracing.go
+++ b/server/plugin/infra/registry/etcd/tracing.go
@@ -17,7 +17,6 @@
package etcd
import (
- "github.com/apache/incubator-servicecomb-service-center/pkg/util"
"github.com/apache/incubator-servicecomb-service-center/server/infra/registry"
"github.com/apache/incubator-servicecomb-service-center/server/infra/tracing"
"github.com/apache/incubator-servicecomb-service-center/server/plugin"
@@ -25,26 +24,12 @@ import (
"net/http"
)
-func ToRequest(op registry.PluginOp) (*http.Request, error) {
- var action string
- switch op.Action {
- case registry.Get:
- action = http.MethodGet
- case registry.Put:
- action = http.MethodPut
- case registry.Delete:
- action = http.MethodDelete
- }
- return http.NewRequest(action, endpoint+"/?"+op.FormatUrlParams(), nil)
-}
-
func TracingBegin(ctx context.Context, operationName string, op registry.PluginOp) tracing.Span {
- r, err := ToRequest(op)
- if err != nil {
- util.Logger().Errorf(err, "new backend request failed")
- return nil
+ r := &tracing.RegistryRequest{
+ Ctx: ctx,
+ Options: op,
+ Endpoint: endpoint,
}
- r = r.WithContext(ctx)
return plugin.Plugins().Tracing().ClientBegin(operationName, r)
}
diff --git a/server/plugin/infra/tracing/buildin/buildin.go b/server/plugin/infra/tracing/buildin/buildin.go
index b4616f2..0150cee 100644
--- a/server/plugin/infra/tracing/buildin/buildin.go
+++ b/server/plugin/infra/tracing/buildin/buildin.go
@@ -25,6 +25,7 @@ import (
"github.com/opentracing/opentracing-go/ext"
"github.com/openzipkin/zipkin-go-opentracing/thrift/gen-go/zipkincore"
"net/http"
+ "net/url"
"sync"
)
@@ -88,14 +89,12 @@ func (zp *Zipkin) ServerEnd(itf tracing.Span, code int, message string) {
func (zp *Zipkin) ClientBegin(operationName string, itf tracing.Request) tracing.Span {
var (
- span opentracing.Span
- ctx context.Context
- carrier interface{}
+ span opentracing.Span
)
switch itf.(type) {
case *http.Request:
r := itf.(*http.Request)
- ctx = r.Context()
+ ctx := r.Context()
parentSpan, ok := ctx.Value(tracing.CTX_TRACE_SPAN).(opentracing.Span)
if !ok {
@@ -110,20 +109,50 @@ func (zp *Zipkin) ClientBegin(operationName string, itf tracing.Request) tracing
span.SetTag(zipkincore.HTTP_PATH, r.URL.Path)
span.SetTag(zipkincore.HTTP_HOST, r.URL.Host)
- carrier = opentracing.HTTPHeadersCarrier(r.Header)
- default:
- // grpc?
- return nil
- }
+ carrier := opentracing.HTTPHeadersCarrier(r.Header)
- util.SetContext(ctx, tracing.CTX_TRACE_SPAN, span)
+ if err := ZipkinTracer().Inject(
+ span.Context(),
+ opentracing.HTTPHeaders,
+ carrier,
+ ); err != nil {
+ util.Logger().Errorf(err, "tracer inject request failed")
+ }
+ case *tracing.RegistryRequest:
+ r := itf.(*tracing.RegistryRequest)
+ ctx := r.Ctx
+
+ parentSpan, ok := ctx.Value(tracing.CTX_TRACE_SPAN).(opentracing.Span)
+ if !ok {
+ return nil
+ }
- if err := ZipkinTracer().Inject(
- span.Context(),
- opentracing.HTTPHeaders,
- carrier,
- ); err != nil {
- util.Logger().Errorf(err, "tracer inject request failed")
+ u, _ := url.Parse(r.Endpoint + "/?" + r.Options.FormatUrlParams())
+
+ span = ZipkinTracer().StartSpan(operationName, opentracing.ChildOf(parentSpan.Context()))
+ ext.SpanKindRPCClient.Set(span)
+ ext.HTTPMethod.Set(span, r.Options.Action.String())
+ ext.HTTPUrl.Set(span, u.String())
+
+ span.SetTag("protocol", "gRPC")
+ span.SetTag(zipkincore.HTTP_PATH, u.Path)
+ span.SetTag(zipkincore.HTTP_HOST, u.Host)
+
+ carrier := opentracing.HTTPHeadersCarrier{}
+ if err := ZipkinTracer().Inject(
+ span.Context(),
+ opentracing.HTTPHeaders,
+ carrier,
+ ); err != nil {
+ util.Logger().Errorf(err, "tracer inject request failed")
+ }
+ // inject context
+ carrier.ForeachKey(func(key, val string) error {
+ util.SetContext(ctx, key, val)
+ return nil
+ })
+ default:
+ return nil
}
return span
diff --git a/server/plugin/infra/tracing/buildin/file_collector.go b/server/plugin/infra/tracing/buildin/file_collector.go
index 6c5ef1f..bd48e5b 100644
--- a/server/plugin/infra/tracing/buildin/file_collector.go
+++ b/server/plugin/infra/tracing/buildin/file_collector.go
@@ -107,6 +107,7 @@ func (f *FileCollector) Run(stopCh <-chan struct{}) {
i = f.Interval * 10
t = time.NewTicker(f.Interval)
nr = time.Now().Add(i)
+ max = f.BatchSize * 2
)
for {
select {
@@ -116,10 +117,10 @@ func (f *FileCollector) Run(stopCh <-chan struct{}) {
case span := <-f.c:
batch = append(batch, span)
if len(batch) >= f.BatchSize {
- if len(batch) > f.BatchSize {
+ if len(batch) > max {
dispose := len(batch) - f.BatchSize
util.Logger().Errorf(nil, "backlog is full, dispose %d span(s), max: %d",
- dispose, f.BatchSize)
+ dispose, max)
batch = batch[dispose:] // allocate more
}
if c := f.write(batch); c == 0 {
--
To stop receiving notification emails like this one, please contact
littlecui@apache.org.