Skip to content

Commit 00cd668

Browse files
committed
refactor(mcp-server): Remove fallback span map and simplify span handling
1 parent ff7d1af commit 00cd668

File tree

1 file changed

+13
-29
lines changed

1 file changed

+13
-29
lines changed

packages/core/src/integrations/mcp-server/correlation.ts

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,13 @@ import type { MCPTransport, RequestId, RequestSpanMapValue } from './types';
1919
*/
2020
const transportToSpanMap = new WeakMap<MCPTransport, Map<RequestId, RequestSpanMapValue>>();
2121

22-
/**
23-
* Fallback span map for invalid transport objects
24-
* @internal Used when transport objects cannot be used as WeakMap keys
25-
*/
26-
const fallbackSpanMap = new Map<RequestId, RequestSpanMapValue>();
27-
2822
/**
2923
* Gets or creates the span map for a specific transport instance
3024
* @internal
3125
* @param transport - MCP transport instance
3226
* @returns Span map for the transport
3327
*/
3428
function getOrCreateSpanMap(transport: MCPTransport): Map<RequestId, RequestSpanMapValue> {
35-
// Handle invalid transport values for WeakMap while preserving correlation
36-
if (!transport || typeof transport !== 'object') {
37-
// Return persistent fallback Map to maintain correlation across calls
38-
return fallbackSpanMap;
39-
}
40-
4129
let spanMap = transportToSpanMap.get(transport);
4230
if (!spanMap) {
4331
spanMap = new Map();
@@ -55,6 +43,7 @@ function getOrCreateSpanMap(transport: MCPTransport): Map<RequestId, RequestSpan
5543
*/
5644
export function storeSpanForRequest(transport: MCPTransport, requestId: RequestId, span: Span, method: string): void {
5745
const spanMap = getOrCreateSpanMap(transport);
46+
5847
spanMap.set(requestId, {
5948
span,
6049
method,
@@ -70,7 +59,7 @@ export function storeSpanForRequest(transport: MCPTransport, requestId: RequestI
7059
*/
7160
export function completeSpanWithResults(transport: MCPTransport, requestId: RequestId, result: unknown): void {
7261
const spanMap = getOrCreateSpanMap(transport);
73-
const spanData = spanMap.get(requestId);
62+
const spanData = spanMap?.get(requestId);
7463
if (spanData) {
7564
const { span, method } = spanData;
7665

@@ -84,29 +73,24 @@ export function completeSpanWithResults(transport: MCPTransport, requestId: Requ
8473
}
8574

8675
span.end();
87-
spanMap.delete(requestId);
76+
spanMap?.delete(requestId);
8877
}
8978
}
9079

9180
/**
9281
* Cleans up pending spans for a specific transport (when that transport closes)
9382
* @param transport - MCP transport instance
94-
* @returns Number of pending spans that were cleaned up
9583
*/
96-
export function cleanupPendingSpansForTransport(transport: MCPTransport): number {
84+
export function cleanupPendingSpansForTransport(transport: MCPTransport): void {
9785
const spanMap = transportToSpanMap.get(transport);
98-
if (!spanMap) return 0;
99-
100-
const pendingCount = spanMap.size;
101-
102-
for (const [, spanData] of spanMap) {
103-
spanData.span.setStatus({
104-
code: SPAN_STATUS_ERROR,
105-
message: 'cancelled',
106-
});
107-
spanData.span.end();
86+
if (spanMap) {
87+
for (const [, spanData] of spanMap) {
88+
spanData.span.setStatus({
89+
code: SPAN_STATUS_ERROR,
90+
message: 'cancelled',
91+
});
92+
spanData.span.end();
93+
}
94+
spanMap.clear();
10895
}
109-
110-
spanMap.clear();
111-
return pendingCount;
11296
}

0 commit comments

Comments
 (0)