mirror of
https://github.com/rjNemo/federation
synced 2026-06-10 12:06:40 +00:00
31 lines
1.3 KiB
JavaScript
31 lines
1.3 KiB
JavaScript
const protobuf = require('./protobuf');
|
|
const protobufJS = require('@apollo/protobufjs/minimal');
|
|
|
|
// Remove Long support. Our uint64s tend to be small (less
|
|
// than 104 days).
|
|
// https://github.com/protobufjs/protobuf.js/issues/1253
|
|
protobufJS.util.Long = undefined;
|
|
protobufJS.configure();
|
|
|
|
// Override the generated protobuf Traces.encode function so that it will look
|
|
// for Traces that are already encoded to Buffer as well as unencoded
|
|
// Traces. This amortizes the protobuf encoding time over each generated Trace
|
|
// instead of bunching it all up at once at sendReport time. In load tests, this
|
|
// change improved p99 end-to-end HTTP response times by a factor of 11 without
|
|
// a casually noticeable effect on p50 times. This also makes it easier for us
|
|
// to implement maxUncompressedReportSize as we know the encoded size of traces
|
|
// as we go.
|
|
const originalTracesAndStatsEncode = protobuf.TracesAndStats.encode;
|
|
protobuf.TracesAndStats.encode = function(message, originalWriter) {
|
|
const writer = originalTracesAndStatsEncode(message, originalWriter);
|
|
const encodedTraces = message.encodedTraces;
|
|
if (encodedTraces != null && encodedTraces.length) {
|
|
for (let i = 0; i < encodedTraces.length; ++i) {
|
|
writer.uint32(/* id 1, wireType 2 =*/ 10);
|
|
writer.bytes(encodedTraces[i]);
|
|
}
|
|
}
|
|
return writer;
|
|
};
|
|
|
|
module.exports = protobuf;
|