dd-trace 6.10.0 → 6.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-3rdparty.csv +5 -0
- package/README.md +0 -17
- package/index.d.ts +128 -6
- package/initialize.mjs +28 -17
- package/openfeature.js +2 -2
- package/package.json +27 -23
- package/packages/datadog-esbuild/index.js +0 -34
- package/packages/datadog-instrumentations/src/anthropic.js +210 -15
- package/packages/datadog-instrumentations/src/aws-sdk.js +9 -1
- package/packages/datadog-instrumentations/src/browser-bunyan.js +11 -0
- package/packages/datadog-instrumentations/src/bunyan.js +3 -16
- package/packages/datadog-instrumentations/src/cucumber.js +30 -15
- package/packages/datadog-instrumentations/src/cypress-config.js +182 -16
- package/packages/datadog-instrumentations/src/cypress-legacy-finalizers.js +30 -0
- package/packages/datadog-instrumentations/src/cypress.js +2 -0
- package/packages/datadog-instrumentations/src/fastify.js +2 -0
- package/packages/datadog-instrumentations/src/helpers/bunyan.js +22 -0
- package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -1
- package/packages/datadog-instrumentations/src/helpers/pool-acquire.js +9 -4
- package/packages/datadog-instrumentations/src/helpers/register.js +10 -8
- package/packages/datadog-instrumentations/src/jest.js +25 -17
- package/packages/datadog-instrumentations/src/mariadb.js +278 -21
- package/packages/datadog-instrumentations/src/mocha/main.js +539 -55
- package/packages/datadog-instrumentations/src/mocha/utils.js +135 -19
- package/packages/datadog-instrumentations/src/playwright-reporter.js +247 -0
- package/packages/datadog-instrumentations/src/playwright.js +182 -35
- package/packages/datadog-instrumentations/src/router.js +2 -0
- package/packages/datadog-instrumentations/src/vitest-main-no-worker-init.js +6 -8
- package/packages/datadog-instrumentations/src/vitest-main.js +11 -3
- package/packages/datadog-plugin-aws-sdk/src/base.js +1 -0
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +163 -44
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +2 -8
- package/packages/datadog-plugin-azure-functions/src/index.js +1 -1
- package/packages/datadog-plugin-browser-bunyan/src/index.js +9 -0
- package/packages/datadog-plugin-bunyan/src/index.js +5 -8
- package/packages/datadog-plugin-cucumber/src/index.js +11 -0
- package/packages/datadog-plugin-cypress/src/after-run.js +5 -1
- package/packages/datadog-plugin-cypress/src/after-spec.js +5 -1
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +81 -29
- package/packages/datadog-plugin-cypress/src/finalization.js +76 -0
- package/packages/datadog-plugin-cypress/src/index.js +12 -6
- package/packages/datadog-plugin-cypress/src/plugin.js +16 -3
- package/packages/datadog-plugin-dd-trace-api/src/index.js +4 -0
- package/packages/datadog-plugin-electron/src/index.js +2 -0
- package/packages/datadog-plugin-fs/src/index.js +1 -1
- package/packages/datadog-plugin-jest/src/index.js +6 -0
- package/packages/datadog-plugin-mocha/src/index.js +56 -1
- package/packages/datadog-plugin-nats/src/index.js +1 -1
- package/packages/datadog-plugin-openai/src/tracing.js +41 -30
- package/packages/datadog-plugin-openai-agents/src/integration.js +1 -0
- package/packages/datadog-plugin-playwright/src/index.js +46 -13
- package/packages/datadog-plugin-vitest/src/index.js +6 -0
- package/packages/datadog-webpack/index.js +0 -11
- package/packages/dd-trace/index.js +0 -1
- package/packages/dd-trace/src/agent/info.js +6 -5
- package/packages/dd-trace/src/aiguard/client.js +100 -1
- package/packages/dd-trace/src/aiguard/errors.js +41 -0
- package/packages/dd-trace/src/aiguard/evaluation.js +357 -0
- package/packages/dd-trace/src/aiguard/integrations/anthropic.js +70 -0
- package/packages/dd-trace/src/aiguard/integrations/index.js +4 -0
- package/packages/dd-trace/src/aiguard/messages/anthropic.js +423 -0
- package/packages/dd-trace/src/aiguard/messages/openai.js +1 -24
- package/packages/dd-trace/src/aiguard/messages/utils.js +28 -0
- package/packages/dd-trace/src/aiguard/messages/vercel-ai.js +1 -11
- package/packages/dd-trace/src/aiguard/sdk.js +22 -278
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +9 -12
- package/packages/dd-trace/src/appsec/reporter.js +2 -0
- package/packages/dd-trace/src/appsec/telemetry/index.js +13 -0
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +16 -0
- package/packages/dd-trace/src/appsec/telemetry/waf.js +24 -0
- package/packages/dd-trace/src/carrier.js +107 -48
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +1 -0
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +5 -5
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +29 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +27 -9
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +21 -5
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/request-tracker.js +164 -0
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +26 -8
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +365 -32
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/request.js +201 -0
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +5 -3
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +9 -5
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +7 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +4 -2
- package/packages/dd-trace/src/ci-visibility/requests/rate-limit.js +39 -0
- package/packages/dd-trace/src/ci-visibility/requests/request.js +3 -6
- package/packages/dd-trace/src/ci-visibility/requests/upload-coverage-report.js +4 -2
- package/packages/dd-trace/src/ci-visibility/requests/upload-test-screenshot.js +10 -4
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +5 -5
- package/packages/dd-trace/src/config/generated-config-types.d.ts +4 -0
- package/packages/dd-trace/src/config/index.js +13 -2
- package/packages/dd-trace/src/config/major-overrides.js +7 -0
- package/packages/dd-trace/src/config/supported-configurations.json +14 -0
- package/packages/dd-trace/src/datastreams/index.js +2 -0
- package/packages/dd-trace/src/datastreams/manager.js +9 -2
- package/packages/dd-trace/src/datastreams/processor.js +15 -13
- package/packages/dd-trace/src/datastreams/size.js +5 -0
- package/packages/dd-trace/src/debugger/constants.js +1 -0
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +5 -11
- package/packages/dd-trace/src/debugger/index.js +4 -2
- package/packages/dd-trace/src/debugger/inspect-segment.js +154 -0
- package/packages/dd-trace/src/evp_proxy/constants.js +8 -0
- package/packages/dd-trace/src/evp_proxy/direct.js +64 -0
- package/packages/dd-trace/src/evp_proxy/discovery.js +133 -0
- package/packages/dd-trace/src/evp_proxy/path.js +22 -0
- package/packages/dd-trace/src/exporters/agent/writer.js +49 -9
- package/packages/dd-trace/src/exporters/common/buffering-exporter.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +5 -2
- package/packages/dd-trace/src/exporters/common/writer.js +11 -6
- package/packages/dd-trace/src/llmobs/experiments/client.js +167 -5
- package/packages/dd-trace/src/llmobs/experiments/dataset.js +484 -92
- package/packages/dd-trace/src/llmobs/experiments/experiment.js +302 -29
- package/packages/dd-trace/src/llmobs/experiments/index.js +75 -64
- package/packages/dd-trace/src/llmobs/experiments/noop.js +135 -7
- package/packages/dd-trace/src/llmobs/experiments/result.js +1 -0
- package/packages/dd-trace/src/llmobs/experiments/util.js +101 -9
- package/packages/dd-trace/src/llmobs/plugins/ai/util.js +12 -3
- package/packages/dd-trace/src/llmobs/plugins/base.js +4 -2
- package/packages/dd-trace/src/noop/proxy.js +3 -4
- package/packages/dd-trace/src/openfeature/constants/constants.js +0 -18
- package/packages/dd-trace/src/openfeature/flagging_provider.js +18 -2
- package/packages/dd-trace/src/openfeature/index.js +7 -4
- package/packages/dd-trace/src/openfeature/remote_config.js +1 -1
- package/packages/dd-trace/src/openfeature/writers/base.js +153 -11
- package/packages/dd-trace/src/openfeature/writers/exposures.js +62 -14
- package/packages/dd-trace/src/openfeature/writers/util.js +97 -15
- package/packages/dd-trace/src/opentelemetry/context_manager.js +7 -7
- package/packages/dd-trace/src/opentelemetry/logs/batch_log_processor.js +2 -1
- package/packages/dd-trace/src/opentelemetry/logs/logger.js +67 -11
- package/packages/dd-trace/src/opentelemetry/logs/otlp_transformer.js +14 -3
- package/packages/dd-trace/src/opentelemetry/metrics/index.js +25 -12
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_span_stats_exporter.js +2 -5
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_span_stats_transformer.js +96 -43
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +22 -13
- package/packages/dd-trace/src/opentracing/tracer.js +5 -2
- package/packages/dd-trace/src/otel-thread-ctx.js +387 -0
- package/packages/dd-trace/src/plugin_manager.js +3 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +6 -1
- package/packages/dd-trace/src/plugins/index.js +1 -0
- package/packages/dd-trace/src/plugins/util/jest.js +4 -3
- package/packages/dd-trace/src/plugins/util/test.js +9 -9
- package/packages/dd-trace/src/plugins/util/web.js +3 -0
- package/packages/dd-trace/src/profiling/profiler.js +1 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +1 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +37 -90
- package/packages/dd-trace/src/profiling/webspan-utils.js +45 -0
- package/packages/dd-trace/src/proxy.js +38 -29
- package/packages/dd-trace/src/ritm.js +9 -2
- package/packages/dd-trace/src/serverless.js +37 -0
- package/packages/dd-trace/src/span_format.js +1 -0
- package/packages/dd-trace/src/span_stats.js +30 -3
- package/packages/dd-trace/src/storage-channels.js +86 -0
- package/packages/dd-trace/src/telemetry/metrics.js +62 -8
- package/packages/dd-trace/src/telemetry/send-data.js +1 -0
- package/packages/dd-trace/src/tracer.js +9 -2
- package/packages/dd-trace/src/tracer_metadata.js +14 -1
- package/packages/dd-trace/src/web-tags-cache.js +132 -0
- package/vendor/dist/@datadog/openfeature-node-server/LICENSE +201 -0
- package/vendor/dist/@datadog/openfeature-node-server/index.js +1 -0
- package/vendor/dist/@datadog/sketches-js/index.js +1 -1
- package/vendor/dist/https-proxy-agent/LICENSE +22 -0
- package/vendor/dist/https-proxy-agent/index.js +4 -0
- package/vendor/dist/protobufjs/index.js +1 -1
- package/vendor/dist/protobufjs/minimal/index.js +1 -1
- package/vendor/dist/proxy-from-env/LICENSE +20 -0
- package/vendor/dist/proxy-from-env/index.js +1 -0
- package/packages/datadog-instrumentations/src/helpers/optional-peer-bundler.js +0 -65
- package/packages/datadog-webpack/src/optional-peer-loader.js +0 -17
- package/packages/dd-trace/src/feature-registry.js +0 -29
- package/packages/dd-trace/src/openfeature/register.js +0 -35
- package/packages/dd-trace/src/openfeature/require-provider.js +0 -18
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { performance } = require('node:perf_hooks')
|
|
4
|
+
|
|
3
5
|
const shimmer = require('../../datadog-shimmer')
|
|
4
6
|
const { channel, addHook } = require('./helpers/instrument')
|
|
7
|
+
const {
|
|
8
|
+
acquireWait,
|
|
9
|
+
clearPoolWaitTime,
|
|
10
|
+
isPoolQueryAcquire,
|
|
11
|
+
runOutsidePoolQueryAcquire,
|
|
12
|
+
runPoolAcquireError,
|
|
13
|
+
runWithPoolWait,
|
|
14
|
+
takePoolWaitTime,
|
|
15
|
+
wrapPoolQueryMethod,
|
|
16
|
+
} = require('./helpers/pool-acquire')
|
|
5
17
|
|
|
6
18
|
const commandAddCh = channel('apm:mariadb:command:add')
|
|
7
19
|
const connectionStartCh = channel('apm:mariadb:connection:start')
|
|
@@ -10,11 +22,37 @@ const startCh = channel('apm:mariadb:query:start')
|
|
|
10
22
|
const finishCh = channel('apm:mariadb:query:finish')
|
|
11
23
|
const errorCh = channel('apm:mariadb:query:error')
|
|
12
24
|
const skipCh = channel('apm:mariadb:pool:skip')
|
|
25
|
+
const acquireStartCh = channel('apm:mariadb:pool:acquire:start')
|
|
26
|
+
const acquireFinishCh = channel('apm:mariadb:pool:acquire:finish')
|
|
27
|
+
const poolAcquireChannels = {
|
|
28
|
+
connectionFinishCh,
|
|
29
|
+
acquireStartCh,
|
|
30
|
+
acquireFinishCh,
|
|
31
|
+
}
|
|
32
|
+
const wrappedPools = new WeakSet()
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @typedef {object} PoolAcquireTiming
|
|
36
|
+
* @property {number} [poolAcquireStart]
|
|
37
|
+
* @property {number} [poolAcquireStartedAt]
|
|
38
|
+
* @property {number} [poolWaitTime]
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
/** @typedef {{ length: number, [index: number]: unknown } & Iterable<unknown>} ArgumentsLike */
|
|
42
|
+
|
|
43
|
+
/** @type {PoolAcquireTiming|undefined} */
|
|
44
|
+
let currentPoolAcquireTiming
|
|
45
|
+
let explicitPoolAcquire = false
|
|
13
46
|
|
|
14
47
|
function wrapCommandStart (start, ctx) {
|
|
15
48
|
return shimmer.wrapFunction(start, start => function (...args) {
|
|
16
49
|
if (!startCh.hasSubscribers) return start.apply(this, args)
|
|
17
50
|
|
|
51
|
+
const poolWaitTime = takePoolWaitTime(args[0])
|
|
52
|
+
if (poolWaitTime !== undefined) {
|
|
53
|
+
ctx.poolWaitTime = poolWaitTime
|
|
54
|
+
}
|
|
55
|
+
|
|
18
56
|
const { reject, resolve } = this
|
|
19
57
|
shimmer.wrap(this, 'resolve', function wrapResolve () {
|
|
20
58
|
return function (...args) {
|
|
@@ -133,43 +171,262 @@ function wrapPoolMethod (createConnection) {
|
|
|
133
171
|
}
|
|
134
172
|
}
|
|
135
173
|
|
|
174
|
+
/**
|
|
175
|
+
* @param {Function} getConnection
|
|
176
|
+
* @returns {Function}
|
|
177
|
+
*/
|
|
178
|
+
function wrapExplicitPoolGetConnection (getConnection) {
|
|
179
|
+
return function wrappedExplicitPoolGetConnection () {
|
|
180
|
+
if (!connectionStartCh.hasSubscribers) {
|
|
181
|
+
return getConnection.apply(this, arguments)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const previous = explicitPoolAcquire
|
|
185
|
+
explicitPoolAcquire = true
|
|
186
|
+
try {
|
|
187
|
+
return runOutsidePoolQueryAcquire(getConnection, this, arguments)
|
|
188
|
+
} finally {
|
|
189
|
+
explicitPoolAcquire = previous
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* @param {Function} method
|
|
196
|
+
* @returns {Function}
|
|
197
|
+
*/
|
|
198
|
+
function wrapPoolQuery (method) {
|
|
199
|
+
return wrapPoolQueryMethod(method, connectionStartCh)
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* @param {Function} Pool
|
|
204
|
+
* @returns {boolean}
|
|
205
|
+
*/
|
|
206
|
+
function claimPoolWrap (Pool) {
|
|
207
|
+
if (wrappedPools.has(Pool)) return false
|
|
208
|
+
wrappedPools.add(Pool)
|
|
209
|
+
return true
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* @param {Function} Pool
|
|
214
|
+
* @returns {Function}
|
|
215
|
+
*/
|
|
216
|
+
function wrapPublicPool (Pool) {
|
|
217
|
+
if (!claimPoolWrap(Pool)) return Pool
|
|
218
|
+
|
|
219
|
+
shimmer.wrap(Pool.prototype, 'getConnection', wrapExplicitPoolGetConnection)
|
|
220
|
+
shimmer.wrap(Pool.prototype, 'query', wrapPoolQuery)
|
|
221
|
+
shimmer.wrap(Pool.prototype, 'execute', wrapPoolQuery)
|
|
222
|
+
return Pool
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* @param {Function} Pool
|
|
227
|
+
* @returns {Function}
|
|
228
|
+
*/
|
|
229
|
+
function wrapInternalPool (Pool) {
|
|
230
|
+
if (!claimPoolWrap(Pool)) return Pool
|
|
231
|
+
|
|
232
|
+
// The idle callback must be replaced before validation and observed before the method returns,
|
|
233
|
+
// which cannot be expressed by Orchestrion's subscriber lifecycle.
|
|
234
|
+
shimmer.wrap(Pool.prototype, '_acquireIdleConnection', wrapPoolAcquireIdleMethod)
|
|
235
|
+
shimmer.wrap(Pool.prototype, 'getConnection', wrapPoolGetConnectionMethod)
|
|
236
|
+
shimmer.wrap(Pool.prototype, '_createPoolConnection', wrapPoolMethod)
|
|
237
|
+
return Pool
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* @param {Record<string, unknown>} acquireCtx
|
|
242
|
+
* @param {Function} callback
|
|
243
|
+
* @param {unknown} thisArg
|
|
244
|
+
* @param {ArgumentsLike} args
|
|
245
|
+
* @returns {unknown}
|
|
246
|
+
*/
|
|
247
|
+
function finishExplicitPoolAcquire (acquireCtx, callback, thisArg, args) {
|
|
248
|
+
acquireFinishCh.publish(acquireCtx)
|
|
249
|
+
return callback.apply(thisArg, args)
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* @param {PoolAcquireTiming} timing
|
|
254
|
+
*/
|
|
255
|
+
function startPoolAcquireTiming (timing) {
|
|
256
|
+
const start = performance.now()
|
|
257
|
+
timing.poolAcquireStart = start
|
|
258
|
+
timing.poolAcquireStartedAt ??= start
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* @param {PoolAcquireTiming} timing
|
|
263
|
+
* @returns {number}
|
|
264
|
+
*/
|
|
265
|
+
function finishPoolAcquireTiming (timing) {
|
|
266
|
+
const poolWaitTime = (timing.poolWaitTime ?? 0) + acquireWait(timing.poolAcquireStart)
|
|
267
|
+
timing.poolAcquireStart = undefined
|
|
268
|
+
timing.poolWaitTime = poolWaitTime
|
|
269
|
+
return poolWaitTime
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* @param {Function} acquireIdleConnection
|
|
274
|
+
* @returns {Function}
|
|
275
|
+
*/
|
|
276
|
+
function wrapPoolAcquireIdleMethod (acquireIdleConnection) {
|
|
277
|
+
return function wrappedAcquireIdleConnection (callback) {
|
|
278
|
+
const timing = currentPoolAcquireTiming
|
|
279
|
+
if (timing === undefined) {
|
|
280
|
+
return acquireIdleConnection.apply(this, arguments)
|
|
281
|
+
}
|
|
282
|
+
currentPoolAcquireTiming = undefined
|
|
283
|
+
|
|
284
|
+
let completed = false
|
|
285
|
+
let synchronous = true
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* @param {unknown} error
|
|
289
|
+
* @returns {unknown}
|
|
290
|
+
*/
|
|
291
|
+
arguments[0] = function wrappedCallback (error) {
|
|
292
|
+
completed = true
|
|
293
|
+
if (error) {
|
|
294
|
+
if (synchronous) {
|
|
295
|
+
startPoolAcquireTiming(timing)
|
|
296
|
+
}
|
|
297
|
+
} else if (synchronous) {
|
|
298
|
+
timing.poolWaitTime = 0
|
|
299
|
+
} else {
|
|
300
|
+
finishPoolAcquireTiming(timing)
|
|
301
|
+
}
|
|
302
|
+
return callback.apply(this, arguments)
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
const result = acquireIdleConnection.apply(this, arguments)
|
|
306
|
+
synchronous = false
|
|
307
|
+
if (!completed) {
|
|
308
|
+
startPoolAcquireTiming(timing)
|
|
309
|
+
}
|
|
310
|
+
return result
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* @param {Function} getConnection
|
|
316
|
+
* @returns {Function}
|
|
317
|
+
*/
|
|
136
318
|
function wrapPoolGetConnectionMethod (getConnection) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
319
|
+
const poolWaitTransfer = { deferred: false }
|
|
320
|
+
|
|
321
|
+
return function wrappedGetConnection (cmdParam, callback) {
|
|
322
|
+
if (!connectionStartCh.hasSubscribers) {
|
|
323
|
+
return getConnection.apply(this, arguments)
|
|
324
|
+
}
|
|
140
325
|
|
|
141
326
|
const ctx = {}
|
|
327
|
+
const poolQueryAcquire = isPoolQueryAcquire()
|
|
328
|
+
const acquireCtx = !poolQueryAcquire && explicitPoolAcquire && acquireStartCh.hasSubscribers
|
|
329
|
+
? { conf: this.opts.connOptions }
|
|
330
|
+
: undefined
|
|
331
|
+
const pool = this
|
|
332
|
+
|
|
333
|
+
if (acquireCtx !== undefined) {
|
|
334
|
+
acquireStartCh.publish(acquireCtx)
|
|
335
|
+
}
|
|
142
336
|
|
|
143
|
-
|
|
144
|
-
|
|
337
|
+
/**
|
|
338
|
+
* @param {unknown} error
|
|
339
|
+
* @param {{ streamOut: object }|undefined} connection
|
|
340
|
+
* @returns {unknown}
|
|
341
|
+
*/
|
|
342
|
+
arguments[1] = function wrappedCallback (error, connection) {
|
|
343
|
+
const poolWaitTime = poolQueryAcquire || acquireCtx !== undefined
|
|
344
|
+
? finishPoolAcquireTiming(ctx)
|
|
345
|
+
: undefined
|
|
346
|
+
|
|
347
|
+
if (poolQueryAcquire) {
|
|
348
|
+
if (error) {
|
|
349
|
+
return runPoolAcquireError(
|
|
350
|
+
ctx.poolAcquireStartedAt,
|
|
351
|
+
error,
|
|
352
|
+
{ conf: pool.opts.connOptions },
|
|
353
|
+
poolAcquireChannels,
|
|
354
|
+
ctx,
|
|
355
|
+
callback,
|
|
356
|
+
this,
|
|
357
|
+
arguments,
|
|
358
|
+
poolWaitTime
|
|
359
|
+
)
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
return runWithPoolWait(
|
|
363
|
+
poolWaitTransfer,
|
|
364
|
+
connection.streamOut,
|
|
365
|
+
poolWaitTime,
|
|
366
|
+
connectionFinishCh,
|
|
367
|
+
ctx,
|
|
368
|
+
callback,
|
|
369
|
+
this,
|
|
370
|
+
arguments
|
|
371
|
+
)
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
if (acquireCtx !== undefined) {
|
|
375
|
+
if (!error && connection !== undefined) {
|
|
376
|
+
clearPoolWaitTime(connection.streamOut)
|
|
377
|
+
}
|
|
378
|
+
acquireCtx.error = error
|
|
379
|
+
acquireCtx.poolWaitTime = poolWaitTime
|
|
380
|
+
return connectionFinishCh.runStores(
|
|
381
|
+
ctx,
|
|
382
|
+
finishExplicitPoolAcquire,
|
|
383
|
+
undefined,
|
|
384
|
+
acquireCtx,
|
|
385
|
+
callback,
|
|
386
|
+
this,
|
|
387
|
+
arguments
|
|
388
|
+
)
|
|
389
|
+
}
|
|
390
|
+
return connectionFinishCh.runStores(ctx, callback, this, ...arguments)
|
|
145
391
|
}
|
|
146
392
|
|
|
147
393
|
connectionStartCh.publish(ctx)
|
|
148
394
|
|
|
149
|
-
|
|
395
|
+
if (!poolQueryAcquire && acquireCtx === undefined) {
|
|
396
|
+
return getConnection.apply(pool, arguments)
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
const previousTiming = currentPoolAcquireTiming
|
|
400
|
+
const previousExplicitPoolAcquire = explicitPoolAcquire
|
|
401
|
+
currentPoolAcquireTiming = ctx
|
|
402
|
+
if (previousExplicitPoolAcquire) explicitPoolAcquire = false
|
|
403
|
+
try {
|
|
404
|
+
return poolQueryAcquire
|
|
405
|
+
? runOutsidePoolQueryAcquire(getConnection, pool, arguments)
|
|
406
|
+
: getConnection.apply(pool, arguments)
|
|
407
|
+
} finally {
|
|
408
|
+
currentPoolAcquireTiming = previousTiming
|
|
409
|
+
if (previousExplicitPoolAcquire) explicitPoolAcquire = true
|
|
410
|
+
}
|
|
150
411
|
}
|
|
151
412
|
}
|
|
152
413
|
|
|
153
414
|
const name = 'mariadb'
|
|
154
415
|
|
|
155
|
-
addHook({ name, file: 'lib/cmd/query.js', versions: ['>=3'] },
|
|
156
|
-
|
|
157
|
-
})
|
|
416
|
+
addHook({ name, file: 'lib/cmd/query.js', versions: ['>=3'], patchDefault: true }, wrapCommand)
|
|
417
|
+
addHook({ name, file: 'lib/cmd/execute.js', versions: ['>=3'], patchDefault: true }, wrapCommand)
|
|
158
418
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
419
|
+
// mariadb 3.4.1 switched its internal getConnection from promises to callbacks. That exposes synchronous
|
|
420
|
+
// recent-idle reuse without a clock read while still letting us time validation and queueing.
|
|
421
|
+
// The same release renamed _createConnection to _createPoolConnection.
|
|
422
|
+
addHook({ name, file: 'lib/pool.js', versions: ['>=3.4.1'], patchDefault: true }, wrapInternalPool)
|
|
162
423
|
|
|
163
|
-
//
|
|
164
|
-
//
|
|
165
|
-
addHook({ name, file: 'lib/pool.js', versions: ['>=3.4.1'] },
|
|
166
|
-
|
|
167
|
-
shimmer.wrap(Pool.prototype, '_createPoolConnection', wrapPoolMethod)
|
|
168
|
-
|
|
169
|
-
return Pool
|
|
170
|
-
})
|
|
424
|
+
// Orchestrion completion follows the returned Promise, but operation classification must end as
|
|
425
|
+
// soon as the facade calls its private internal pool, so these methods need a synchronous bracket.
|
|
426
|
+
addHook({ name, file: 'lib/pool-promise.js', versions: ['>=3.4.1'], patchDefault: true }, wrapPublicPool)
|
|
427
|
+
addHook({ name, file: 'lib/pool-callback.js', versions: ['>=3.4.1'], patchDefault: true }, wrapPublicPool)
|
|
171
428
|
|
|
172
|
-
addHook({ name, file: 'lib/pool.js', versions: ['>=3 <3.4.1'] }, (Pool) => {
|
|
429
|
+
addHook({ name, file: 'lib/pool.js', versions: ['>=3 <3.4.1'], patchDefault: true }, (Pool) => {
|
|
173
430
|
shimmer.wrap(Pool.prototype, '_createConnection', wrapPoolMethod)
|
|
174
431
|
|
|
175
432
|
return Pool
|