mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-21 20:26:41 +00:00
Fix issue where span status wasn't properly passed to parents
This commit is contained in:
parent
1c173805c6
commit
4b13763607
1 changed files with 14 additions and 17 deletions
|
|
@ -48,6 +48,7 @@ import (
|
||||||
"go.opentelemetry.io/otel"
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
|
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -643,11 +644,18 @@ func startNewPayloadSpan(ctx context.Context, name string, params engine.Executa
|
||||||
attribute.Int("tx.count", len(params.Transactions)),
|
attribute.Int("tx.count", len(params.Transactions)),
|
||||||
)
|
)
|
||||||
spanEnd := func(err *error) {
|
spanEnd := func(err *error) {
|
||||||
|
ro, _ := span.(sdktrace.ReadOnlySpan)
|
||||||
if *err != nil {
|
if *err != nil {
|
||||||
|
// Error occurred, record it and set status on span and parent
|
||||||
span.RecordError(*err)
|
span.RecordError(*err)
|
||||||
span.SetStatus(codes.Error, (*err).Error())
|
span.SetStatus(codes.Error, (*err).Error())
|
||||||
parentSpan.SetStatus(codes.Error, (*err).Error())
|
parentSpan.SetStatus(codes.Error, (*err).Error())
|
||||||
} else {
|
} else if ro.Status().Code == codes.Error {
|
||||||
|
// Span's child had an error, propagate it to parent
|
||||||
|
// Note: Span's status was already set in the child
|
||||||
|
parentSpan.SetStatus(codes.Error, ro.Status().Description)
|
||||||
|
} else if ro.Status().Code == codes.Unset {
|
||||||
|
// No error and no status set, mark as success
|
||||||
span.SetStatus(codes.Ok, "")
|
span.SetStatus(codes.Ok, "")
|
||||||
}
|
}
|
||||||
span.End()
|
span.End()
|
||||||
|
|
@ -755,16 +763,10 @@ func (api *ConsensusAPI) newPayload(ctx context.Context, params engine.Executabl
|
||||||
|
|
||||||
log.Trace("Engine API request received", "method", "NewPayload", "number", params.Number, "hash", params.BlockHash)
|
log.Trace("Engine API request received", "method", "NewPayload", "number", params.Number, "hash", params.BlockHash)
|
||||||
|
|
||||||
tracer := otel.Tracer("")
|
_, spanEnd := startNewPayloadSpan(ctx, "engine.newPayload.ExecutableDataToBlock", params)
|
||||||
rootSpan := trace.SpanFromContext(ctx)
|
|
||||||
_, span := tracer.Start(ctx, "engine.newPayload.ExecutableDataToBlock")
|
|
||||||
block, err := engine.ExecutableDataToBlock(params, versionedHashes, beaconRoot, requests)
|
block, err := engine.ExecutableDataToBlock(params, versionedHashes, beaconRoot, requests)
|
||||||
if err != nil {
|
spanEnd(&err)
|
||||||
span.RecordError(err)
|
|
||||||
span.SetStatus(codes.Error, err.Error())
|
|
||||||
rootSpan.SetStatus(codes.Error, err.Error())
|
|
||||||
}
|
|
||||||
span.End()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
bgu := "nil"
|
bgu := "nil"
|
||||||
if params.BlobGasUsed != nil {
|
if params.BlobGasUsed != nil {
|
||||||
|
|
@ -837,16 +839,11 @@ func (api *ConsensusAPI) newPayload(ctx context.Context, params engine.Executabl
|
||||||
return engine.PayloadStatusV1{Status: engine.ACCEPTED}, nil
|
return engine.PayloadStatusV1{Status: engine.ACCEPTED}, nil
|
||||||
}
|
}
|
||||||
log.Trace("Inserting block without sethead", "hash", block.Hash(), "number", block.Number())
|
log.Trace("Inserting block without sethead", "hash", block.Hash(), "number", block.Number())
|
||||||
|
_, spanEnd = startNewPayloadSpan(ctx, "engine.newPayload.InsertBlockWithoutSetHead", params)
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
_, span = tracer.Start(ctx, "engine.newPayload.InsertBlockWithoutSetHead")
|
|
||||||
proofs, err := api.eth.BlockChain().InsertBlockWithoutSetHead(block, witness)
|
proofs, err := api.eth.BlockChain().InsertBlockWithoutSetHead(block, witness)
|
||||||
processingTime := time.Since(start)
|
processingTime := time.Since(start)
|
||||||
if err != nil {
|
spanEnd(&err)
|
||||||
span.RecordError(err)
|
|
||||||
span.SetStatus(codes.Error, err.Error())
|
|
||||||
rootSpan.SetStatus(codes.Error, err.Error())
|
|
||||||
}
|
|
||||||
span.End()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn("NewPayload: inserting block failed", "error", err)
|
log.Warn("NewPayload: inserting block failed", "error", err)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue