Skip to content

Commit 2488550

Browse files
committed
Isolate benchmarking code because npm run is erroneous and sadly runs other code too
1 parent fbc460b commit 2488550

File tree

5 files changed

+170
-30
lines changed

5 files changed

+170
-30
lines changed

observability-test/benchmark.ts renamed to observability-benchmark/benchmark.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const lessComparator = (a, b) => {
2626
* a map of functionNames to the percentiles of RAM usage and time spent.
2727
*/
2828
export async function runBenchmarks(runners: Function[], done: Function) {
29-
const nRuns = 10000;
29+
const nRuns = 20000;
3030
const nWarmups = Math.round(nRuns / 8);
3131
const benchmarkValues = {_totalRuns: nRuns, _warmRuns: nWarmups};
3232

observability-test/comparisons.ts renamed to observability-benchmark/comparisons.ts

+166-28
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,15 @@ const {
3434
} = require('@opentelemetry/sdk-trace-node');
3535
const {SimpleSpanProcessor} = require('@opentelemetry/sdk-trace-base');
3636
import {humanizeBytes, humanizeTime, runBenchmarks} from './benchmark';
37+
const {diag, DiagConsoleLogger, DiagLogLevel} = require('@opentelemetry/api');
38+
// diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG);
3739

38-
const {ObservabilityOptions} = require('../src/instrument');
40+
const {
41+
getTracer,
42+
startTrace,
43+
traceConfig,
44+
ObservabilityOptions,
45+
} = require('../src/instrument');
3946

4047
const selectSql = 'SELECT 1';
4148
const updateSql = 'UPDATE FOO SET BAR=1 WHERE BAZ=2';
@@ -124,6 +131,16 @@ async function setup(
124131
});
125132
}
126133

134+
interface percentiles {
135+
p50: number;
136+
p50_s: string;
137+
}
138+
139+
interface description {
140+
ram: percentiles;
141+
timeSpent: percentiles;
142+
}
143+
127144
describe('Benchmarking Database', () => {
128145
if (!process.env.SPANNER_RUN_BENCHMARKS) {
129146
console.log(
@@ -207,23 +224,6 @@ describe('Benchmarking Database', () => {
207224
});
208225
},
209226

210-
/*
211-
async function databaseGetTransactionAsync() {
212-
const tx = await database.getTransction();
213-
214-
try {
215-
await tx!.begin();
216-
return await tx!.runUpdate(updateSql);
217-
} catch (e) {
218-
console.log(e);
219-
return null;
220-
} finally {
221-
console.log('tx.end');
222-
tx!.end();
223-
console.log('exiting');
224-
}
225-
},
226-
*/
227227
async function databaseRunTransactionAsyncTxRunUpdate() {
228228
const withTx = async tx => {
229229
await tx!.begin();
@@ -274,16 +274,6 @@ describe('Benchmarking Database', () => {
274274
});
275275
}
276276

277-
interface percentiles {
278-
p50: number;
279-
p50_s: string;
280-
}
281-
282-
interface description {
283-
ram: percentiles;
284-
timeSpent: percentiles;
285-
}
286-
287277
it('Database runs compared', async () => {
288278
const traced = await setItUp(true);
289279
const untraced = await setItUp(false);
@@ -327,3 +317,151 @@ describe('Benchmarking Database', () => {
327317
function percentDiff(orig, fresh) {
328318
return ((Number(fresh) - Number(orig)) * 100.0) / Number(orig);
329319
}
320+
321+
describe('Benchmark getTracer', () => {
322+
it('No tracerProvider/global tracerProvider', async () => {
323+
console.log('tracerProvider');
324+
const results = await benchmarkStartTrace();
325+
326+
console.log(
327+
`Total Runs: ${results['_totalRuns']}\nWarm up runs: ${results['_warmRuns']}`
328+
);
329+
330+
for (const method in results) {
331+
const values = results[method];
332+
if (typeof values !== 'object') {
333+
continue;
334+
}
335+
const desc = values as description;
336+
const ram = desc.ram;
337+
const timeSpent = desc!.timeSpent;
338+
console.log(`${method}`);
339+
console.log(`\tRAM (${ram.p50_s})`);
340+
console.log(`\tTimeSpent (${timeSpent.p50_s})`);
341+
}
342+
});
343+
});
344+
345+
function benchmarkGetTracer(): Promise<Map<string, unknown>> {
346+
const customTracerProvider = new NodeTracerProvider();
347+
let trapDoorCalled = false;
348+
349+
const runners: Function[] = [
350+
function getTracerNullTracerProviderUnsetGlobalTracerProvider() {
351+
return getTracer(null);
352+
},
353+
354+
function getTracerDefinedTracerProvider() {
355+
return getTracer(customTracerProvider);
356+
},
357+
358+
function getTracerRegisteredGlobally() {
359+
if (!trapDoorCalled) {
360+
customTracerProvider.register();
361+
trapDoorCalled = true;
362+
}
363+
return getTracer(null);
364+
},
365+
];
366+
367+
return new Promise(resolve => {
368+
runBenchmarks(runners, results => {
369+
resolve(results);
370+
});
371+
});
372+
}
373+
374+
function benchmarkStartSpan(): Promise<Map<string, unknown>> {
375+
const customTracerProvider = new NodeTracerProvider();
376+
let trapDoorCalled = false;
377+
378+
const runners: Function[] = [
379+
function withNullTracerProviderUnsetGlobalTracerProvider() {
380+
return new Promise(resolve => {
381+
getTracer(null).startActiveSpan('aSpan', {}, span => {
382+
resolve(span);
383+
});
384+
});
385+
},
386+
387+
function withTracerDefinedTracerProvider() {
388+
return new Promise(resolve => {
389+
getTracer(customTracerProvider).startActiveSpan('aSpan', {}, span => {
390+
resolve(span);
391+
});
392+
});
393+
},
394+
395+
function getTracerRegisteredGlobally() {
396+
if (!trapDoorCalled) {
397+
customTracerProvider.register();
398+
trapDoorCalled = true;
399+
}
400+
return new Promise(resolve => {
401+
getTracer(null).startActiveSpan('aSpan', {}, span => {
402+
resolve(span);
403+
});
404+
});
405+
},
406+
];
407+
408+
return new Promise(resolve => {
409+
runBenchmarks(runners, results => {
410+
resolve(results);
411+
});
412+
});
413+
}
414+
415+
function benchmarkStartTrace(): Promise<Map<string, unknown>> {
416+
const customTracerProvider = new NodeTracerProvider();
417+
let trapDoorCalled = false;
418+
419+
const runners: Function[] = [
420+
async function withNullTracerProviderUnsetGlobalTracerProvider() {
421+
const promise = new Promise((resolve, reject) => {
422+
const opts: typeof traceConfig = {
423+
opts: {tracerProvider: null},
424+
};
425+
startTrace('aspan', null, span => {
426+
span.end();
427+
resolve(span);
428+
});
429+
});
430+
return promise;
431+
},
432+
433+
function withTracerDefinedTracerProvider() {
434+
return new Promise(resolve => {
435+
const opts: typeof traceConfig = {
436+
opts: {tracerProvider: customTracerProvider},
437+
};
438+
startTrace('aspan', opts, span => {
439+
span.end();
440+
resolve(span);
441+
});
442+
});
443+
},
444+
445+
function withTracerRegisteredGlobally() {
446+
if (!trapDoorCalled) {
447+
customTracerProvider.register();
448+
trapDoorCalled = true;
449+
}
450+
return new Promise(resolve => {
451+
const opts: typeof traceConfig = {
452+
opts: {tracerProvider: null},
453+
};
454+
startTrace('aspan', opts, span => {
455+
span.end();
456+
resolve(span);
457+
});
458+
});
459+
},
460+
];
461+
462+
return new Promise(resolve => {
463+
runBenchmarks(runners, results => {
464+
resolve(results);
465+
});
466+
});
467+
}

observability-test/spanner.ts

-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ const {
4545
AsyncHooksContextManager,
4646
} = require('@opentelemetry/context-async-hooks');
4747
import {promisify} from '@google-cloud/promisify';
48-
import {runBenchmarks} from './benchmark';
4948

5049
const {ObservabilityOptions} = require('../src/instrument');
5150
import {SessionPool} from '../src/session-pool';

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"samples-test-with-archived": "cd samples/ && npm link ../ && npm test-with-archived && cd ../",
3434
"samples-test": "cd samples/ && npm link ../ && npm test && cd ../",
3535
"system-test": "mocha build/system-test --timeout 1600000",
36+
"observability-benchmark": "mocha build/observability-benchmark --timeout 1600000",
3637
"observability-test": "mocha build/observability-test --timeout 1600000",
3738
"cleanup": "mocha scripts/cleanup.js --timeout 30000",
3839
"test": "mocha build/test build/test/common build/observability-test",
@@ -43,6 +44,7 @@
4344
"prepare": "npm run compile-protos && npm run compile",
4445
"pretest": "npm run compile",
4546
"presystem-test": "npm run compile",
47+
"preobservability-benchmark": "npm run compile",
4648
"preobservability-test": "npm run compile",
4749
"proto": "compileProtos src",
4850
"docs-test": "linkinator docs",

tsconfig.json

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
"test/**/*.ts",
2121
"system-test/*.ts",
2222
"benchmark/*.ts",
23+
"observability-benchmark/*.ts",
2324
"observability-test/*.ts"
2425
]
2526
}

0 commit comments

Comments
 (0)