Skip to content

Commit

Permalink
chore: use iterators for tracking map, const for default values
Browse files Browse the repository at this point in the history
  • Loading branch information
AVVS committed Mar 5, 2024
1 parent 62e8ea9 commit cf321a8
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 29 deletions.
61 changes: 34 additions & 27 deletions packages/grpc-js/src/channelz.ts
Expand Up @@ -133,6 +133,11 @@ interface TraceEvent {
*/
const TARGET_RETAINED_TRACES = 32;

/**
* Default number of sockets/servers/channels/subchannels to return
*/
const DEFAULT_MAX_RESULTS = 100;

export class ChannelzTraceStub {
readonly events: TraceEvent[] = [];
readonly creationTimestamp: Date = new Date();
Expand Down Expand Up @@ -198,19 +203,15 @@ export class ChannelzTrace {
}
}

type RefOrderedMap = OrderedMap<
number,
{ ref: { id: number; kind: EntityTypes; name: string }; count: number }
>;

export class ChannelzChildrenTracker {
private channelChildren = new OrderedMap<
number,
{ ref: ChannelRef; count: number }
>();
private subchannelChildren = new OrderedMap<
number,
{ ref: SubchannelRef; count: number }
>();
private socketChildren = new OrderedMap<
number,
{ ref: SocketRef; count: number }
>();
private channelChildren: RefOrderedMap = new OrderedMap();
private subchannelChildren: RefOrderedMap = new OrderedMap();
private socketChildren: RefOrderedMap = new OrderedMap();
private trackerMap = {
[EntityTypes.channel]: this.channelChildren,
[EntityTypes.subchannel]: this.subchannelChildren,
Expand All @@ -219,16 +220,19 @@ export class ChannelzChildrenTracker {

refChild(child: ChannelRef | SubchannelRef | SocketRef) {
const tracker = this.trackerMap[child.kind];
const trackedChild = tracker.getElementByKey(child.id);

if (trackedChild === undefined) {
tracker.setElement(child.id, {
// @ts-expect-error union issues
ref: child,
count: 1,
});
const trackedChild = tracker.find(child.id);

if (trackedChild.equals(tracker.end())) {
tracker.setElement(
child.id,
{
ref: child,
count: 1,
},
trackedChild
);
} else {
trackedChild.count += 1;
trackedChild.pointer[1].count += 1;
}
}

Expand All @@ -245,9 +249,9 @@ export class ChannelzChildrenTracker {

getChildLists(): ChannelzChildren {
return {
channels: this.channelChildren,
subchannels: this.subchannelChildren,
sockets: this.socketChildren,
channels: this.channelChildren as ChannelzChildren['channels'],
subchannels: this.subchannelChildren as ChannelzChildren['subchannels'],
sockets: this.socketChildren as ChannelzChildren['sockets'],
};
}
}
Expand Down Expand Up @@ -585,7 +589,8 @@ function GetTopChannels(
call: ServerUnaryCall<GetTopChannelsRequest__Output, GetTopChannelsResponse>,
callback: sendUnaryData<GetTopChannelsResponse>
): void {
const maxResults = parseInt(call.request.max_results, 10) || 100;
const maxResults =
parseInt(call.request.max_results, 10) || DEFAULT_MAX_RESULTS;
const resultList: ChannelMessage[] = [];
const startId = parseInt(call.request.start_channel_id, 10);
const channelEntries = entityMaps[EntityTypes.channel];
Expand Down Expand Up @@ -649,7 +654,8 @@ function GetServers(
call: ServerUnaryCall<GetServersRequest__Output, GetServersResponse>,
callback: sendUnaryData<GetServersResponse>
): void {
const maxResults = parseInt(call.request.max_results, 10) || 100;
const maxResults =
parseInt(call.request.max_results, 10) || DEFAULT_MAX_RESULTS;
const startId = parseInt(call.request.start_server_id, 10);
const serverEntries = entityMaps[EntityTypes.server];
const resultList: ServerMessage[] = [];
Expand Down Expand Up @@ -820,7 +826,8 @@ function GetServerSockets(
}

const startId = parseInt(call.request.start_socket_id, 10);
const maxResults = parseInt(call.request.max_results, 10) || 100;
const maxResults =
parseInt(call.request.max_results, 10) || DEFAULT_MAX_RESULTS;
const resolvedInfo = serverEntry.getInfo();
// If we wanted to include listener sockets in the result, this line would
// instead say
Expand Down
4 changes: 2 additions & 2 deletions packages/grpc-js/src/server.ts
Expand Up @@ -368,7 +368,7 @@ export class Server {
};
}

private getChannelzSessionInfoGetter(
private getChannelzSessionInfo(
session: http2.ServerHttp2Session
): SocketInfo {
const sessionInfo = this.sessions.get(session)!;
Expand Down Expand Up @@ -1494,7 +1494,7 @@ export class Server {
return (session: http2.ServerHttp2Session) => {
const channelzRef = registerChannelzSocket(
session.socket?.remoteAddress ?? 'unknown',
this.getChannelzSessionInfoGetter.bind(this, session),
this.getChannelzSessionInfo.bind(this, session),
this.channelzEnabled
);

Expand Down

0 comments on commit cf321a8

Please sign in to comment.