diff --git a/packages/opentelemetry-plugin-grpc/src/grpc.ts b/packages/opentelemetry-plugin-grpc/src/grpc.ts index e01f2aeb3be..9123a2ce2f9 100644 --- a/packages/opentelemetry-plugin-grpc/src/grpc.ts +++ b/packages/opentelemetry-plugin-grpc/src/grpc.ts @@ -14,7 +14,11 @@ * limitations under the License. */ -import { BasePlugin } from '@opentelemetry/core'; +import { + BasePlugin, + getExtractedSpanContext, + setExtractedSpanContext, +} from '@opentelemetry/core'; import { CanonicalCode, Span, @@ -22,6 +26,7 @@ import { SpanKind, SpanOptions, Status, + Context, } from '@opentelemetry/api'; import * as events from 'events'; import * as grpcTypes from 'grpc'; @@ -122,24 +127,25 @@ export class GrpcPlugin extends BasePlugin { } } - private _getSpanContext(metadata: grpcTypes.Metadata): SpanContext | null { - const metadataValue = metadata.getMap()[GRPC_TRACE_KEY] as Buffer; - // Entry doesn't exist - if (!metadataValue) { - return null; - } - return this._tracer.getBinaryFormat().fromBytes(metadataValue); + private _getSpanContext( + metadata: grpcTypes.Metadata + ): SpanContext | undefined { + return getExtractedSpanContext( + this._tracer.getHttpTextFormat().extract(Context.TODO, metadata.getMap()) + ); } private _setSpanContext( metadata: grpcTypes.Metadata, spanContext: SpanContext ): void { - const serializedSpanContext = this._tracer - .getBinaryFormat() - .toBytes(spanContext); - const buffer = Buffer.from(serializedSpanContext); - metadata.set(GRPC_TRACE_KEY, buffer); + const carrier = {}; + this._tracer + .getHttpTextFormat() + .inject(setExtractedSpanContext(Context.TODO, spanContext), carrier); + for (const [k, v] of Object.entries(carrier)) { + metadata.set(k, v as string); + } } private _patchServer() {