diff --git a/.github/workflows/integration_tests_local.yml b/.github/workflows/integration_tests_local.yml index 76486097..3eb84561 100644 --- a/.github/workflows/integration_tests_local.yml +++ b/.github/workflows/integration_tests_local.yml @@ -59,6 +59,9 @@ jobs: with: node-version: ${{ matrix.node_version }} + - name: Test timeout trace assertions + run: node --test integration_tests_local/check-timeout-logs.test.js + - name: Run local container integration tests (nodejs${{ matrix.node_major }}.x, ${{ matrix.architecture }}) run: PLATFORM=${{ matrix.platform }} RUNTIME_PARAM=${{ matrix.node_major }} ./integration_tests_local/run.sh diff --git a/integration_tests/container/cjs/timeout-handler.js b/integration_tests/container/cjs/timeout-handler.js new file mode 100644 index 00000000..5895c932 --- /dev/null +++ b/integration_tests/container/cjs/timeout-handler.js @@ -0,0 +1,11 @@ +const tracer = require("dd-trace"); + +// Both entry paths initialize dd-trace before loading this unwrapped handler. +// The child stays open past the real RIE deadline: only the timeout monitor's +// killAll() can flush it along with the error-tagged invocation span. +exports.handle = async function handle() { + return tracer.trace("timeout.unfinished", async () => { + await new Promise((resolve) => setTimeout(resolve, 60_000)); + return { statusCode: 200, body: "unreachable" }; + }); +}; diff --git a/integration_tests/container/cjs/timeout.js b/integration_tests/container/cjs/timeout.js new file mode 100644 index 00000000..3dcbc06a --- /dev/null +++ b/integration_tests/container/cjs/timeout.js @@ -0,0 +1,7 @@ +// Manual wrapping does not initialize the tracer. Load it first so its +// datadog-lambda-js hook installs the pre-migration timeout monitor. +require("dd-trace").init(); +const { datadog } = require("datadog-lambda-js"); +const { handle } = require("./timeout-handler"); + +module.exports.handle = datadog(handle); diff --git a/integration_tests_local/README.md b/integration_tests_local/README.md index 17d41f70..2ed37009 100644 --- a/integration_tests_local/README.md +++ b/integration_tests_local/README.md @@ -1,7 +1,7 @@ # Local integration tests (docker + AWS RIE, no AWS account required) This directory contains a **local** integration test harness for -datadog-lambda-js. It runs eleven cases — container-image, layer-mode, and +datadog-lambda-js. It runs container-image, layer-mode, and manual-wrap handlers, plus targeted feature cases (HTTP header injection, custom trace extractors, proactive initialization) — inside Docker against the [AWS Lambda Runtime Interface Emulator (RIE)](https://github.com/aws/aws-lambda-runtime-interface-emulator), @@ -43,6 +43,10 @@ SKIP_PACK=true RUNTIME_PARAM=18 CASE_PARAM=container-esm ./integration_tests_loc # Force amd64 images instead of arm64 PLATFORM=linux/amd64 ./integration_tests_local/run.sh + +# Bypass a broken local VM host-port forward without changing the function. +# Runs the same HTTP requests using curl inside the target container. +RIE_HTTP_TRANSPORT=container RUNTIME_PARAM=22 CASE_PARAM=manual-timeout ./integration_tests_local/run.sh ``` CI runs the complete runtime/case matrix on native `linux/amd64` and @@ -69,6 +73,8 @@ The case names are: | `manual-send-metrics` | manual wrap calling `sendDistributionMetric` inside and outside the handler; per-event return values | | `manual-process-input` | manual wrap with userland `dd-trace` init reading the active span; per-event return values | | `manual-callback` | manual wrap of a callback-style `(event, context, callback)` handler; pins the `promisifiedHandler` seam end to end (the migration spike broke exactly this) | +| `manual-timeout` | explicit userland tracer init, then manual wrap; impending-timeout error on the invocation and `killAll()` flushing an unfinished child before RIE terminates the runtime | +| `cjs-timeout` | the same timeout contract through `DD_LAMBDA_HANDLER` and the npm redirect entrypoint, exercising the raw-handler hook also used by layers | | `manual-metrics-only` | `DD_TRACE_ENABLED=false` (metrics-only customers): enhanced + custom metrics still flush, no `aws.lambda` span, no trace JSON, no `dd.trace_id` log correlation | | `cjs-capture-payload` | `DD_CAPTURE_LAMBDA_PAYLOAD=true` in redirect mode; span meta gains `function.request` / `function.response` with the captured payloads | | `cjs-http-requests` | downstream HTTP calls against a hermetic mock server in redirect mode; asserts injected `x-datadog-*`/`traceparent` headers and log injection via dd-trace's http plugin | @@ -112,6 +118,7 @@ snapshots/logs/.log # shared across runtimes snapshots/return_values/default.json # return mode "default": every event, every case snapshots/return_values/.json # return mode "case": one payload for all 9 events snapshots/return_values/_.json # return mode "per-event": payload embeds event data +snapshots/return_values/.txt # RIE's plain-text timeout response ``` The normalized logs of most cases are identical across all five runtimes, so @@ -159,10 +166,11 @@ filter to absorb it would be invisible. Current overrides: assertions — the proactive-initialization markers — are grep-checked on the raw logs and are identical on every runtime. -In update mode, a leg that disagrees with an existing shared golden **fails** -instead of overwriting it — otherwise the last runtime to run would silently -define the expectation for all of them. To capture a genuine per-runtime -divergence, `touch` the override file first so the write targets it. +In update mode, the first leg writes the shared golden. Later legs in the +same run **fail** if they disagree instead of overwriting it — otherwise the +last runtime to run would silently define the expectation for all of them. +To capture a genuine per-runtime divergence, `touch` the override file first +so the write targets it. ## The mock HTTP server (cjs-http-requests, manual-http-requests) @@ -180,6 +188,94 @@ while `manual-http-requests` is manual-wrapped with no tracer (TraceListener falls back to the library's own `patchHttp`). See "Known emulation gaps" for what the manual case cannot pin locally. +## Impending timeouts (manual-timeout, cjs-timeout) + +These cases exercise both pre-migration dd-trace hook paths: manual +`datadog(handler)` wrapping and the `DD_LAMBDA_HANDLER` redirect. The manual +fixture initializes dd-trace **before** importing the shim; importing the shim +alone does not initialize tracing or install the timeout monitor. + +The handler opens a `timeout.unfinished` child span and waits 60 seconds. +`AWS_LAMBDA_FUNCTION_TIMEOUT=5` gives the invocation a real RIE deadline, and +`DD_APM_FLUSH_DEADLINE_MILLISECONDS=3500` makes dd-trace flush roughly 1.5 +seconds into the invocation (less the init time). RIE then kills the runtime +at five seconds. All nine input events are exercised, with a fresh runtime +after each timeout. The two cases add about 90 seconds per runtime leg. + +RIE v1.36 returns HTTP 200 with the **plain text** +`Task timed out after 5.00 seconds`, not Lambda's JSON error envelope. +Consequently, these return goldens use `.txt`. Completion is gated on REPORT, +timeout-reset, and SIGKILL records; a killed runtime never emits INVOKE RTDONE. +The HTTP client is bounded to 15 seconds so a broken deadline cannot hang CI. + +Before normalization or snapshot creation, `check-timeout-logs.js` reads all +trace payloads and asserts for every raw request ID: + +- exactly one `aws.lambda` span across all payloads, with `error=1`, + `error.type=Impending Timeout`, and the expected error message; +- exactly one unfinished child in that invocation's trace, with the invocation + as its parent and no error on the child; +- both spans were exported before REPORT, and the invocation span finished + within 2.5 seconds (the configured 1.5-second guard plus scheduling headroom, + which also rejects silently falling back to the default 100ms flush deadline); +- RIE actually reset and killed the runtime once per invocation. + +This catches duplicate invocation spans even when they appear in separate +traces, and prevents a metrics-only run from becoming a passing golden. The +helper preserves trace payloads unchanged. It normalizes only volatile IDs +and timestamps in RIE timeout diagnostics, including Go's varying log-field +order. Every diagnostic record and severity remains in the snapshot; the +shared AWS/RIE normalizer is unchanged. + +Run the helper's regression tests independently with: + +```bash +node --test integration_tests_local/check-timeout-logs.test.js +``` + +### Golden provenance + +The timeout goldens were recaptured after merging main, from pre-migration +library commit `291fd14e9b8c54b94ba5b57998f726231839dc92` +(`datadog-lambda-js` 12.143.0), with no additional production-source changes. +Both cases used RIE v1.36 on `linux/arm64`, across Node 18/20/22/24/26. The +fixture runner installed dd-trace 5.126.0 on Node 18/20 and the lockfile-resolved +6.15.0 on Node 22/24/26. All five runtimes produced the same shared goldens; +no runtime-specific timeout overrides were needed. + +Both cases passed a comparison-only rerun across all five runtimes (90 +invocations), leaving all four timeout snapshot files byte-for-byte unchanged. + +The existing `manual-throw-error` and `container-cjs` goldens also passed +unchanged on Node 22 through the same transport. The checker has nine +regression tests. + +The previous files recorded the older `cf751a76` baseline with dd-trace +5.105.0 on every runtime. Those snapshots stopped matching after the main +merge: the current tracer omits empty `links: []` fields, and the shim resolves +the loaded tracer's version at runtime instead of recording an empty +`dd_trace` tag. The recapture changes only those fields and ordinary RIE +record ordering under the existing line-order comparison. Timeout error +decoration, span counts, parent/child relationships, and flush checks remain +unchanged. Neither the raw checker nor the shared normalizer was loosened. + +When intentionally recapturing an existing shared golden, first review why +the baseline changed. The current runner lets the first leg overwrite a shared +golden in `UPDATE_SNAPSHOTS=true` mode and requires later legs in that run to +agree. Unlike the older capture baseline, it no longer requires deleting the +existing golden first. + +The local capture used `RIE_HTTP_TRANSPORT=container` because Colima's +published host ports were unreachable. RIE was reachable over IPv4 inside +the containers, so this was not an IPv6-only RIE listener. This transport +does not alter the handler, tracer, invocation body, or RIE timeout. + +These are L2 emulator goldens, not evidence of real AWS termination behavior +or layer packaging. The redirect case covers the raw-handler hook used by +layers; real AWS timeout behavior still needs L3 coverage. The CI workflow is +configured to compare these goldens on native amd64 and arm64; the local capture +used arm64. + ## Proactive initialization (cjs-proactive-init) The library stamps `initTime = Date.now()` at wrapper-module load @@ -209,6 +305,33 @@ the three markers: ## Pinned runtime infrastructure +All five Lambda base images are pinned to multi-architecture manifest digests +in `run.sh`'s `lambda_node_image_tag()`. The same reference is used by the CJS, +ESM, layer, and mock-server fixtures, with `PLATFORM` selecting amd64 or arm64. +The pins come from [CI run 36168116285](https://github.com/DataDog/datadog-lambda-js/actions/runs/36168116285) +on September 25, 2026. A warm local Docker cache and a clean CI runner must not +silently test different runtime releases under the same major-version tag. + +That discrepancy caused two baseline changes with no library-source changes: +the newer Node 22/24 managed runtime emits a structured +`runtime_worker_pool_initializing` DEBUG record, and Node 24 now includes +`requestId` in its thrown-error response. The corresponding proactive-init log +goldens and Node 24 error-return golden were recaptured from the pre-migration +library at `8785aeee`, using the pinned images on arm64. The runtime record is +preserved in full, including `workerCount: 4` (the harness specifies `--cpus 4`) +and `executionEnvironmentMaxConcurrency: 1`; the response retains `requestId` +with its existing volatile-value normalization. The shared normalizer and the +three raw proactive-init assertions are unchanged. + +After recapture, all 18 cases passed in comparison-only mode on both Node 22 +and Node 24 / arm64 (324 invocations). The three refreshed expectations kept +the same hashes, and the timeout goldens were not changed by this refresh. + +To update a runtime, change its digest in `lambda_node_image_tag()`, inspect +the runtime differences, and recapture only the affected expectations before +running comparison-only tests on both architectures. Do not remove runtime +records to make a new base image match an older golden. + The harness pins AWS Runtime Interface Emulator (RIE) `v1.36` and verifies the cached binary on every run before mounting it into a container: @@ -224,7 +347,7 @@ Node 26 is still preview-only in ECR Public: the bare `public.ecr.aws/lambda/nodejs:26` tag does not exist. The logical runtime stays `26` for image names, function names, and snapshot paths, while the Docker base-image build argument maps to the dated multi-arch tag -`26-preview.2026.08.21.22`. +`26-preview.2026.08.21.22` plus its manifest digest. Node 26 is a strict leg like every other; where its preview runtime genuinely diverges (error stack frames, warning emission) it carries @@ -248,6 +371,8 @@ under test. A base-image change must be reviewed, not hidden by normalization. Reads stdin, writes stdout; honors `RUN_ID` for optional per-run ID stripping. - `prepare-layer.js` — assembles the layer fixture's build context from the repo build, mirroring the release Dockerfile's `/opt` layout +- `check-timeout-logs.js` — validates raw timeout traces and normalizes only + the timeout-specific RIE diagnostics before the shared normalizer - `bin/` — downloaded RIE binary (gitignored) - `snapshots/logs/` — normalized log snapshots, shared per case across runtimes, with optional `_node.log` overrides diff --git a/integration_tests_local/check-timeout-logs.js b/integration_tests_local/check-timeout-logs.js new file mode 100644 index 00000000..6bf75006 --- /dev/null +++ b/integration_tests_local/check-timeout-logs.js @@ -0,0 +1,93 @@ +"use strict"; + +const assert = require("node:assert/strict"); +const fs = require("node:fs"); + +// Check raw identities and complete trace payloads before the shared golden +// normalizer removes IDs or the runner sorts lines. A "some trace matches" +// assertion cannot catch two invocation spans exported in different payloads. +const expected = Number(process.argv[2]); +assert.ok(Number.isInteger(expected) && expected > 0, "expected invocation count is required"); +const raw = fs.readFileSync(0, "utf8"); +const lines = raw.trimEnd().split("\n"); +const starts = new Map(); +const reports = new Map(); +const spans = []; + +for (const [index, line] of lines.entries()) { + const start = /^START RequestId: (\S+)/.exec(line); + const report = /^REPORT RequestId: (\S+)/.exec(line); + if (start) { + assert.ok(!starts.has(start[1]), "duplicate START request ID"); + starts.set(start[1], index); + } + if (report) { + assert.ok(!reports.has(report[1]), "duplicate REPORT request ID"); + reports.set(report[1], index); + } + let record; + try { + record = JSON.parse(line); + } catch { + continue; + } + if (Array.isArray(record.traces)) { + for (const trace of record.traces) { + for (const span of trace) spans.push({ span, index }); + } + } +} + +assert.equal(starts.size, expected, "START count"); +assert.equal(reports.size, expected, "REPORT count"); +assert.equal(lines.filter((line) => line.includes("Reset initiated: Timeout")).length, expected, "timeout resets"); +assert.equal(lines.filter((line) => line.includes("Sending SIGKILL to runtime-")).length, expected, "runtime kills"); + +const invocations = spans.filter(({ span }) => span.name === "aws.lambda"); +const children = spans.filter(({ span }) => span.name === "timeout.unfinished"); +assert.equal(invocations.length, expected, "exactly one Lambda span per invocation across all trace payloads"); +assert.equal(children.length, expected, "killAll must flush every unfinished child"); +for (const [requestId, startIndex] of starts) { + const matching = invocations.filter(({ span }) => span.meta?.request_id === requestId); + assert.equal(matching.length, 1, `Lambda span count for ${requestId}`); + const { span, index } = matching[0]; + assert.equal(span.error, 1, "invocation must be marked as an error"); + assert.equal(span.meta["error.type"], "Impending Timeout"); + assert.equal(span.meta["error.message"], "Datadog detected an impending timeout"); + assert.ok(index > startIndex && index < reports.get(requestId), "span exported before runtime timeout REPORT"); + // The configured guard fires ~1.5s in, allowing 1s of scheduling overhead. + // Expected around 1.5s; allow generous tolerance while rejecting immediate firing. + assert.ok( + span.duration >= 0.5e9 && span.duration < 2.5e9, + `span must honor the 3500ms flush deadline: got ${span.duration / 1e9}s`, + ); + const matchingChildren = children.filter( + ({ span: child }) => child.trace_id === span.trace_id && child.parent_id === span.span_id, + ); + assert.equal(matchingChildren.length, 1, "unfinished child must stay in its invocation's trace"); + const child = matchingChildren[0]; + assert.equal(child.span.error, 0, "timeout must decorate the invocation rather than the child"); + assert.ok( + child.index > startIndex && child.index < reports.get(requestId), + "child exported before runtime timeout REPORT", + ); +} + +// Only RIE's new timeout diagnostics need extra normalization. Keep every +// record, severity, and error value; replace volatile runtime/PID/request IDs +// and canonicalize Go's nondeterministic order of these two log fields. +process.stdout.write( + lines + .map((line) => { + if (!/^\d{2} \w{3} \d{4} .*\[(?:INFO|ERROR|WARNING)\] \(rapid\)/.test(line)) return line; + return line + .replace(/^\d{2} \w{3} \d{4} \d{2}:\d{2}:\d{2},\d{3} /, "XXXX ") + .replace(/InvokeID=[0-9a-f-]+/g, "InvokeID=XXXX") + .replace(/runtime-\d+\(\d+\)/g, "runtime-XX(XX)") + .replace( + "Invoke failed error=errResetReceived InvokeID=XXXX", + "Invoke failed InvokeID=XXXX error=errResetReceived", + ); + }) + .join("\n") + "\n", +); diff --git a/integration_tests_local/check-timeout-logs.test.js b/integration_tests_local/check-timeout-logs.test.js new file mode 100644 index 00000000..f7d40deb --- /dev/null +++ b/integration_tests_local/check-timeout-logs.test.js @@ -0,0 +1,121 @@ +"use strict"; + +const assert = require("node:assert/strict"); +const { spawnSync } = require("node:child_process"); +const path = require("node:path"); +const { test } = require("node:test"); + +function fixture() { + const invocation = { + name: "aws.lambda", + trace_id: "trace", + span_id: "lambda", + parent_id: "0", + error: 1, + duration: 1.5e9, + meta: { + request_id: "abc-def", + "error.type": "Impending Timeout", + "error.message": "Datadog detected an impending timeout", + }, + }; + const child = { + name: "timeout.unfinished", + trace_id: "trace", + span_id: "child", + parent_id: "lambda", + error: 0, + }; + return { invocation, child }; +} + +function rawLog(payloads, { late = false, kill = true } = {}) { + const records = payloads.map((spans) => JSON.stringify({ traces: [spans] })); + const report = "REPORT RequestId: abc-def Duration: 5000.00 ms"; + return ( + [ + "START RequestId: abc-def Version: $LATEST", + ...(late ? [report, ...records] : [...records, report]), + "25 Sep 2026 02:03:57,172 [ERROR] (rapid) Invoke failed error=errResetReceived InvokeID=abc-def", + "25 Sep 2026 02:03:57,173 [WARNING] (rapid) Reset initiated: Timeout", + ...(kill ? ["25 Sep 2026 02:03:57,173 [INFO] (rapid) Sending SIGKILL to runtime-1(28)."] : []), + ].join("\n") + "\n" + ); +} + +function check(input) { + return spawnSync(process.execPath, [path.join(__dirname, "check-timeout-logs.js"), "1"], { + input, + encoding: "utf8", + }); +} + +test("accepts complete exports and normalizes only volatile RIE diagnostics", () => { + const { invocation, child } = fixture(); + const result = check(rawLog([[invocation], [child]])); + assert.equal(result.status, 0, result.stderr); + assert.ok(result.stdout.includes(JSON.stringify({ traces: [[invocation]] })), "trace payload unchanged"); + assert.ok(result.stdout.includes("XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived")); + assert.ok(result.stdout.includes("XXXX [WARNING] (rapid) Reset initiated: Timeout")); + assert.ok(result.stdout.includes("XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX).")); +}); + +test("rejects a second Lambda span in a separate trace payload", () => { + const { invocation, child } = fixture(); + const duplicate = { ...invocation, trace_id: "other-trace", span_id: "other-lambda" }; + const result = check(rawLog([[invocation, child], [duplicate]])); + assert.equal(result.status, 1); + assert.match(result.stderr, /exactly one Lambda span/); +}); + +test("rejects metrics-only logs without an invocation span", () => { + const result = check(rawLog([])); + assert.equal(result.status, 1); + assert.match(result.stderr, /exactly one Lambda span/); +}); + +test("rejects a missing unfinished child", () => { + const { invocation } = fixture(); + const result = check(rawLog([[invocation]])); + assert.equal(result.status, 1); + assert.match(result.stderr, /killAll must flush every unfinished child/); +}); + +test("rejects a child exported in the wrong trace", () => { + const { invocation, child } = fixture(); + child.trace_id = "unrelated-trace"; + const result = check(rawLog([[invocation, child]])); + assert.equal(result.status, 1); + assert.match(result.stderr, /unfinished child must stay/); +}); + +test("rejects timeout decoration on the child instead of the invocation", () => { + const { invocation, child } = fixture(); + invocation.error = 0; + child.error = 1; + const result = check(rawLog([[invocation, child]])); + assert.equal(result.status, 1); + assert.match(result.stderr, /invocation must be marked as an error/); +}); + +test("rejects an invocation exported after the runtime reports its timeout", () => { + const { invocation, child } = fixture(); + const result = check(rawLog([[invocation, child]], { late: true })); + assert.equal(result.status, 1); + assert.match(result.stderr, /span exported before runtime timeout REPORT/); +}); + +test("rejects falling back to the default flush deadline", () => { + const { invocation, child } = fixture(); + invocation.duration = 4.9e9; + const result = check(rawLog([[invocation, child]])); + assert.equal(result.status, 1); + assert.match(result.stderr, /span must honor the 3500ms flush deadline/); +}); + +test("requires evidence that RIE actually terminated the runtime", () => { + const { invocation, child } = fixture(); + const result = check(rawLog([[invocation, child]], { kill: false })); + assert.equal(result.status, 1); + assert.match(result.stderr, /runtime kills/); +}); diff --git a/integration_tests_local/run.sh b/integration_tests_local/run.sh index 3c94db01..d65207e5 100755 --- a/integration_tests_local/run.sh +++ b/integration_tests_local/run.sh @@ -24,6 +24,8 @@ # manual-send-metrics | cjs | send-metrics.handle | manual wrap; sendDistributionMetric via DD_FLUSH_TO_LOG # manual-process-input | cjs | process-input.handle | manual wrap; dd-trace child spans via tracer.wrap # manual-callback | cjs | callback.handle | manual wrap; callback-style (event, context, callback) handler — the spike's proven break seam +# manual-timeout | cjs | timeout.handle | manual wrap; impending timeout -> aws.lambda span tagged error.type=Impending Timeout, flushed before the runtime kills the invoke +# cjs-timeout | cjs | node_modules/datadog-lambda-js/dist/handler.handler | DD_LAMBDA_HANDLER path; same timeout and unfinished-child flush contract # cjs-http-requests | cjs | node_modules/datadog-lambda-js/dist/handler.handler | npm redirect; downstream HTTP header injection via dd-trace's http plugin (hermetic mock server) # manual-http-requests | cjs | http-requests-manual.handle | manual wrap; patchHttp fallback wrapping + per-request logging (hermetic mock) # cjs-fetch-requests | cjs | node_modules/datadog-lambda-js/dist/handler.handler | npm redirect; header injection on global fetch via dd-trace's undici plugin (hermetic mock) @@ -44,6 +46,8 @@ # VARIANT_PARAM - legacy alias: cjs -> container-cjs, esm -> container-esm # SIMULATE_PROACTIVE_INIT - legacy alias for CASE_PARAM=cjs-proactive-init # PLATFORM - docker platform (default: linux/arm64) +# RIE_HTTP_TRANSPORT - host (default) or container; container uses docker exec +# when the local VM cannot forward published ports # UPDATE_SNAPSHOTS=true - overwrite local snapshots instead of diffing # SKIP_PACK=true - reuse existing container/*/datadog-lambda-js-local.tgz # and the existing layer fixture context @@ -64,6 +68,11 @@ repo_dir=$(dirname "$local_dir") integration_tests_dir="$repo_dir/integration_tests" PLATFORM=${PLATFORM:-linux/arm64} +RIE_HTTP_TRANSPORT=${RIE_HTTP_TRANSPORT:-host} +case "$RIE_HTTP_TRANSPORT" in + host|container) ;; + *) echo "Unsupported RIE_HTTP_TRANSPORT: $RIE_HTTP_TRANSPORT (use host or container)"; exit 1 ;; +esac RIE_VERSION=1.36 case "$PLATFORM" in linux/arm64) @@ -117,6 +126,8 @@ ALL_CASES=( "manual-send-metrics" "manual-process-input" "manual-callback" + "manual-timeout" + "cjs-timeout" "cjs-http-requests" "manual-http-requests" "cjs-fetch-requests" @@ -135,6 +146,9 @@ function configure_case() { case_expect_error=false case_proactive=false case_needs_mock=false + case_invoke_timeout=0 + case_timeout=false + case_return_extension=json # Return-value golden shape: # default - every event returns the shared default.json payload # case - every event returns one case-specific payload (error bodies) @@ -173,8 +187,8 @@ function configure_case() { case_return_mode=case # Stack frames carry line:col that shift with fixture edits and # node-internal frames whose line numbers vary by Node major. - # The node26 preview RIC embeds a per-invocation requestId in the - # error body; strip it wherever it appears. + # Node 24 and the Node 26 preview RIC embed a per-invocation requestId + # in the error body; retain the field and normalize its value. case_return_filter='s/:[0-9]+:[0-9]+([\)"])/:XXX:XXX\1/g; s/"requestId":"[0-9a-f-]+"/"requestId":"XXXX"/g' ;; manual-status-500) @@ -203,6 +217,27 @@ function configure_case() { case_image=cjs case_entry_handler="callback.handle" ;; + manual-timeout|cjs-timeout) + # dd-trace's pre-migration monitor flushes the invocation and an + # unfinished child ~1.5s in; RIE kills the runtime at 5s. Exercise + # both hook branches: the shim export and DD_LAMBDA_HANDLER. + case_image=cjs + case_entry_handler="timeout.handle" + case_extra_env=( + -e AWS_LAMBDA_FUNCTION_TIMEOUT=5 + -e DD_APM_FLUSH_DEADLINE_MILLISECONDS=3500 + ) + if [ "$case_name" = cjs-timeout ]; then + case_entry_handler="node_modules/datadog-lambda-js/dist/handler.handler" + case_extra_env+=(-e DD_LAMBDA_HANDLER=timeout-handler.handle) + fi + # RIE v1.36 returns a plain-text timeout body, not an error JSON + # envelope, and emits Reset/SIGKILL instead of INVOKE RTDONE. + case_timeout=true + case_return_mode=case + case_return_extension=txt + case_invoke_timeout=15 + ;; manual-metrics-only) # DD_TRACE_ENABLED=false — metrics-only customers. The golden pins # that enhanced + custom metrics still flush (via DD_FLUSH_TO_LOG) @@ -428,6 +463,18 @@ function prepare_layer_context() { # golden shows the injected downstream trace context. mock_script='const http=require("http");http.createServer((req,res)=>{res.setHeader("content-type","application/json");res.end(JSON.stringify({url:req.url,headers:req.headers}));}).listen(8080);' mock_started=false +function container_http() { + local target_cid=$1 + local host_port=$2 + local resource=$3 + shift 3 + if [ "$RIE_HTTP_TRANSPORT" = container ]; then + docker exec -i "$target_cid" curl -s "$@" "http://127.0.0.1:8080$resource" + else + curl -s "$@" "http://127.0.0.1:$host_port$resource" + fi +} + function start_mock() { local base_image=$1 if [ "$mock_started" = true ]; then @@ -446,7 +493,7 @@ function start_mock() { # Desktop port proxy before the backend is reachable, which then # drops the next real request ("empty reply"). Any HTTP response — # the mock 200s every path — proves the full path works. - if curl -s -o /dev/null --max-time 2 "http://localhost:$port/"; then + if container_http "$mock_cid" "$port" / -o /dev/null --max-time 2; then ready=true break fi @@ -467,11 +514,18 @@ input_event_files=($(for file_name in ${input_event_files[@]}; do echo $file_nam set +e # Don't exit this script if an invocation fails or there's a diff function lambda_node_image_tag() { - if [ "$1" = "26" ]; then - echo "26-preview.2026.08.21.22" - else - echo "$1" - fi + # Multi-architecture manifest digests keep local caches and clean CI runners + # on the same runtime. Floating major tags can change logs and error bodies + # independently of the library under test. Review snapshot changes when + # intentionally updating these pins; do not normalize runtime changes away. + case "$1" in + 18) echo "18@sha256:daf6a5c0a2b36153b94c91f3563e8ef89b3b19e4129963c6ccb07b8c5251f7ef" ;; + 20) echo "20@sha256:a4440274d6f0fb4e6cb92cd5f2a97254efe6612f631d9974b197ecbd4a61fcab" ;; + 22) echo "22@sha256:1922086069c2effeb6b5c3f3b839d393c21dadb28df5bea0920cdb97a71451bd" ;; + 24) echo "24@sha256:1c7e718a6973b27b31cd3535ac58537b242c932427bbf4ca72b27bc14977b656" ;; + 26) echo "26-preview.2026.08.21.22@sha256:b9d6953f685b42667843f9bbc4f77d4711749c93df8fef984baa44bfdea89195" ;; + *) echo "Unsupported Lambda Node image: $1" >&2; return 1 ;; + esac } function compare_snapshot() { @@ -548,7 +602,7 @@ function write_snapshot() { } for node_version in "${RUNTIMES[@]}"; do - node_image_tag=$(lambda_node_image_tag "$node_version") + node_image_tag=$(lambda_node_image_tag "$node_version") || exit 1 # Resolve both tracer lines to exact versions. The v5 compatibility pin is # maintained explicitly; the v6 pin follows the root Yarn lockfile, so the # regular dependency-update workflow updates the RIE fixtures as well. @@ -625,7 +679,7 @@ for node_version in "${RUNTIMES[@]}"; do # exit status proves the whole proxy + HTTP path. ready=false for i in $(seq 1 60); do - if curl -s -o /dev/null --max-time 2 "http://localhost:$port/"; then + if container_http "$cid" "$port" / -o /dev/null --max-time 2; then ready=true break fi @@ -649,9 +703,9 @@ for node_version in "${RUNTIMES[@]}"; do for input_event_file in "${input_event_files[@]}"; do input_event_name=$(echo "$input_event_file" | sed "s/.json//") # curl does not fail on HTTP errors, so validate the response status. - invoke_response=$(curl -s -w '\n%{http_code}' -XPOST \ - "http://localhost:$port/2015-03-31/functions/function/invocations" \ - -d @"$integration_tests_dir/input_events/$input_event_file") + invoke_response=$(container_http "$cid" "$port" /2015-03-31/functions/function/invocations \ + --max-time "$case_invoke_timeout" -w '\n%{http_code}' -XPOST \ + --data-binary @- < "$integration_tests_dir/input_events/$input_event_file") invoke_success=$? http_code=$(printf '%s\n' "$invoke_response" | tail -n1) return_value=$(printf '%s\n' "$invoke_response" | sed '$d') @@ -680,6 +734,11 @@ for node_version in "${RUNTIMES[@]}"; do continue fi fi + if [ "$case_timeout" = true ] && [ "$return_value" != "Task timed out after 5.00 seconds" ]; then + echo "Failed: expected the RIE timeout body for $handler_name with $input_event_name, got: $return_value" + mismatch_found=true + continue + fi echo " $input_event_name -> $return_value" # Return-value goldens resolve from most to least specific; the @@ -705,7 +764,7 @@ for node_version in "${RUNTIMES[@]}"; do case "$case_return_mode" in case) # Same payload for every event (e.g. an error body). - return_snapshot="$local_dir/snapshots/return_values/${case_name}.json" + return_snapshot="$local_dir/snapshots/return_values/${case_name}.${case_return_extension}" ;; per-event) # Payload embeds event data (record ids, request ids), @@ -742,7 +801,7 @@ for node_version in "${RUNTIMES[@]}"; do # The managed-instances path used by the proactive-init case emits # REPORT but never RTDONE, so requiring it there would always time out. expected_invocation_count=${#input_event_files[@]} - if [ "$case_proactive" = true ]; then + if [ "$case_proactive" = true ] || [ "$case_timeout" = true ]; then expected_rtdone_count=0 else expected_rtdone_count=$expected_invocation_count @@ -753,8 +812,16 @@ for node_version in "${RUNTIMES[@]}"; do raw_logs=$(docker logs "$cid" 2>&1) report_count=$(printf '%s\n' "$raw_logs" | grep -c '^REPORT RequestId:' || true) rtdone_count=$(printf '%s\n' "$raw_logs" | grep -c 'INVOKE RTDONE' || true) + timeout_logs_ready=true + if [ "$case_timeout" = true ]; then + reset_count=$(printf '%s\n' "$raw_logs" | grep -c 'Reset initiated: Timeout' || true) + kill_count=$(printf '%s\n' "$raw_logs" | grep -c 'Sending SIGKILL to runtime-' || true) + if [ "$reset_count" -lt "$expected_invocation_count" ] || [ "$kill_count" -lt "$expected_invocation_count" ]; then + timeout_logs_ready=false + fi + fi if [ "$report_count" -ge "$expected_invocation_count" ] && \ - [ "$rtdone_count" -ge "$expected_rtdone_count" ]; then + [ "$rtdone_count" -ge "$expected_rtdone_count" ] && [ "$timeout_logs_ready" = true ]; then logs_ready=true break fi @@ -786,7 +853,19 @@ for node_version in "${RUNTIMES[@]}"; do done fi - logs=$(printf '%s\n' "$raw_logs" | "$repo_dir/scripts/normalize_integration_logs.sh" rie) + snapshot_logs=$raw_logs + if [ "$case_timeout" = true ]; then + snapshot_logs=$(printf '%s\n' "$raw_logs" | node "$local_dir/check-timeout-logs.js" "$expected_invocation_count") + if [ "$?" -ne 0 ]; then + echo "FAILURE: timeout trace assertions failed for $function_name" >&2 + mismatch_found=true + docker rm -f "$cid" >/dev/null 2>&1 + container_ids=("${container_ids[@]/$cid}") + continue + fi + echo "Ok: exactly one timeout-tagged Lambda span and one flushed child per invocation" + fi + logs=$(printf '%s\n' "$snapshot_logs" | "$repo_dir/scripts/normalize_integration_logs.sh" rie) # `runtime:nodejsNN.x` is the only genuinely runtime-specific line in # the whole log — everything else is identical across 18/20/22/24/26. diff --git a/integration_tests_local/snapshots/logs/cjs-proactive-init.log b/integration_tests_local/snapshots/logs/cjs-proactive-init.log index 303d92fa..87c5f53e 100644 --- a/integration_tests_local/snapshots/logs/cjs-proactive-init.log +++ b/integration_tests_local/snapshots/logs/cjs-proactive-init.log @@ -1,6 +1,16 @@ time=XXXX-XX-XXTXX:XX:XX.XXXZ level=INFO msg="executing bootstrap" command=/lambda-entrypoint.sh time=XXXX-XX-XXTXX:XX:XX.XXXZ level=INFO msg="The extension's directory does not exist, assuming no extensions to be loaded" fullDir=/opt/extensions time=XXXX-XX-XXTXX:XX:XX.XXXZ level=INFO msg=LocalProcessSupervisor.Exec pid=XX path=/var/runtime/bootstrap args=[/var/runtime/bootstrap] +{ + "timestamp": "XXXX-XX-XXTXX:XX:XX.XXXZ", + "level": "DEBUG", + "requestId": "XXXX", + "message": { + "event": "runtime_worker_pool_initializing", + "workerCount": 4, + "executionEnvironmentMaxConcurrency": 1 + } +} START RequestId: XXXX Version: $LATEST { "e": XXXX, @@ -135,6 +145,8 @@ START RequestId: XXXX Version: $LATEST "requestId": "XXXX", "message": "[dd.trace_id=XXXX dd.span_id=XXXX] (node:XX) TimeoutOverflowWarning: XXXX does not fit into a 32-bit signed integer.\nTimeout duration was set to 1." } +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms { "traces": [ [ @@ -222,8 +234,6 @@ START RequestId: XXXX Version: $LATEST ] ] } -END RequestId: XXXX -REPORT RequestId: XXXX Duration: XXXX ms START RequestId: XXXX Version: $LATEST { "e": XXXX, @@ -246,6 +256,8 @@ START RequestId: XXXX Version: $LATEST "requestId": "XXXX", "message": "[dd.trace_id=XXXX dd.span_id=XXXX] (node:XX) TimeoutOverflowWarning: XXXX does not fit into a 32-bit signed integer.\nTimeout duration was set to 1." } +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms { "traces": [ [ @@ -333,8 +345,6 @@ START RequestId: XXXX Version: $LATEST ] ] } -END RequestId: XXXX -REPORT RequestId: XXXX Duration: XXXX ms START RequestId: XXXX Version: $LATEST { "e": XXXX, diff --git a/integration_tests_local/snapshots/logs/cjs-proactive-init_node24.log b/integration_tests_local/snapshots/logs/cjs-proactive-init_node24.log index 303d92fa..f596d2a6 100644 --- a/integration_tests_local/snapshots/logs/cjs-proactive-init_node24.log +++ b/integration_tests_local/snapshots/logs/cjs-proactive-init_node24.log @@ -1,6 +1,16 @@ time=XXXX-XX-XXTXX:XX:XX.XXXZ level=INFO msg="executing bootstrap" command=/lambda-entrypoint.sh time=XXXX-XX-XXTXX:XX:XX.XXXZ level=INFO msg="The extension's directory does not exist, assuming no extensions to be loaded" fullDir=/opt/extensions time=XXXX-XX-XXTXX:XX:XX.XXXZ level=INFO msg=LocalProcessSupervisor.Exec pid=XX path=/var/runtime/bootstrap args=[/var/runtime/bootstrap] +{ + "timestamp": "XXXX-XX-XXTXX:XX:XX.XXXZ", + "level": "DEBUG", + "requestId": "XXXX", + "message": { + "event": "runtime_worker_pool_initializing", + "workerCount": 4, + "executionEnvironmentMaxConcurrency": 1 + } +} START RequestId: XXXX Version: $LATEST { "e": XXXX, @@ -135,6 +145,8 @@ START RequestId: XXXX Version: $LATEST "requestId": "XXXX", "message": "[dd.trace_id=XXXX dd.span_id=XXXX] (node:XX) TimeoutOverflowWarning: XXXX does not fit into a 32-bit signed integer.\nTimeout duration was set to 1." } +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms { "traces": [ [ @@ -222,8 +234,6 @@ START RequestId: XXXX Version: $LATEST ] ] } -END RequestId: XXXX -REPORT RequestId: XXXX Duration: XXXX ms START RequestId: XXXX Version: $LATEST { "e": XXXX, @@ -578,6 +588,8 @@ START RequestId: XXXX Version: $LATEST "requestId": "XXXX", "message": "[dd.trace_id=XXXX dd.span_id=XXXX] (node:XX) TimeoutOverflowWarning: XXXX does not fit into a 32-bit signed integer.\nTimeout duration was set to 1." } +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms { "traces": [ [ @@ -664,8 +676,6 @@ START RequestId: XXXX Version: $LATEST ] ] } -END RequestId: XXXX -REPORT RequestId: XXXX Duration: XXXX ms START RequestId: XXXX Version: $LATEST { "e": XXXX, @@ -688,6 +698,8 @@ START RequestId: XXXX Version: $LATEST "requestId": "XXXX", "message": "[dd.trace_id=XXXX dd.span_id=XXXX] (node:XX) TimeoutOverflowWarning: XXXX does not fit into a 32-bit signed integer.\nTimeout duration was set to 1." } +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms { "traces": [ [ @@ -774,8 +786,6 @@ START RequestId: XXXX Version: $LATEST ] ] } -END RequestId: XXXX -REPORT RequestId: XXXX Duration: XXXX ms START RequestId: XXXX Version: $LATEST { "e": XXXX, @@ -798,6 +808,8 @@ START RequestId: XXXX Version: $LATEST "requestId": "XXXX", "message": "[dd.trace_id=XXXX dd.span_id=XXXX] (node:XX) TimeoutOverflowWarning: XXXX does not fit into a 32-bit signed integer.\nTimeout duration was set to 1." } +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms { "traces": [ [ @@ -883,8 +895,6 @@ START RequestId: XXXX Version: $LATEST ] ] } -END RequestId: XXXX -REPORT RequestId: XXXX Duration: XXXX ms START RequestId: XXXX Version: $LATEST { "e": XXXX, diff --git a/integration_tests_local/snapshots/logs/cjs-timeout.log b/integration_tests_local/snapshots/logs/cjs-timeout.log new file mode 100644 index 00000000..98d23561 --- /dev/null +++ b/integration_tests_local/snapshots/logs/cjs-timeout.log @@ -0,0 +1,1255 @@ +XXXX [INFO] (rapid) exec '/lambda-entrypoint.sh' (cwd=/var/task, handler=node_modules/datadog-lambda-js/dist/handler.handler) +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: init) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-cjs-timeout", + "resource:integration-tests-js-local-cjs-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.apigateway", + "resource": "GET /{proxy+}", + "service": "remappedApiGatewayServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-cjs-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "_dd.origin": "lambda", + "service": "remappedApiGatewayServiceName", + "runtime-id":"XXXX", + "http.url": "https://undefined", + "resource_names": "GET /{proxy+}", + "request_id":"XXXX", + "span.kind": "server", + "apiid":"XXXX", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "sync", + "http.method": "GET", + "stage": "test", + "domain_name": "", + "dd_resource_key": "arn:aws:apigateway:us-east-1::/restapis/wt6mne2s9k", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-cjs-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-cjs-timeout", + "service": "integration-tests-js-local-cjs-timeout", + "type": "serverless", + "error": 1, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-cjs-timeout", + "functionname": "integration-tests-js-local-cjs-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "api-gateway", + "function_trigger.event_source_arn": "arn:aws:apigateway:us-east-1::/restapis/wt6mne2s9k/stages/test", + "http.method": "GET", + "http.route": "/{proxy+}", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-cjs-timeout", + "error": 0, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +END RequestId: XXXX +REPORT RequestId: XXXX Init Duration: XXXX ms Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-cjs-timeout", + "resource:integration-tests-js-local-cjs-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.dynamodb", + "resource": "MODIFY someTableName", + "service": "remappedDynamoDbServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-cjs-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "_dd.origin": "lambda", + "service": "remappedDynamoDbServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.dynamodb", + "tablename": "someTableName", + "resource_names": "MODIFY someTableName", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "event_name": "MODIFY", + "event_version": "1.1", + "event_source_arn": "arn:aws:dynamodb:us-east-1:1234567890:table/someTableName/stream/2024-12-11T20:00:00.000", + "event_id": "0123456789abcdef09123456789abcdef", + "stream_view_type": "KEYS_ONLY", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-cjs-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "size_bytes": 37, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-cjs-timeout", + "service": "integration-tests-js-local-cjs-timeout", + "type": "serverless", + "error": 1, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-cjs-timeout", + "functionname": "integration-tests-js-local-cjs-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "dynamodb", + "function_trigger.event_source_arn": "arn:aws:dynamodb:us-east-1:1234567890:table/someTableName/stream/2024-12-11T20:00:00.000", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-cjs-timeout", + "error": 0, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-cjs-timeout", + "resource:integration-tests-js-local-cjs-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.dynamodb", + "resource": "REMOVE someTableName", + "service": "remappedDynamoDbServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-cjs-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "_dd.origin": "lambda", + "service": "remappedDynamoDbServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.dynamodb", + "tablename": "someTableName", + "resource_names": "REMOVE someTableName", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "event_name": "REMOVE", + "event_version": "1.1", + "event_source_arn": "arn:aws:dynamodb:us-east-1:1234567890:table/someTableName/stream/2024-12-11T20:00:00.000", + "event_id": "0123456789abcdef09123456789abcdef", + "stream_view_type": "KEYS_ONLY", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-cjs-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "size_bytes": 37, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-cjs-timeout", + "service": "integration-tests-js-local-cjs-timeout", + "type": "serverless", + "error": 1, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-cjs-timeout", + "functionname": "integration-tests-js-local-cjs-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "dynamodb", + "function_trigger.event_source_arn": "arn:aws:dynamodb:us-east-1:1234567890:table/someTableName/stream/2024-12-11T20:00:00.000", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-cjs-timeout", + "error": 0, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-cjs-timeout", + "resource:integration-tests-js-local-cjs-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.dynamodb", + "resource": "INSERT someTableName", + "service": "remappedDynamoDbServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-cjs-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "_dd.origin": "lambda", + "service": "remappedDynamoDbServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.dynamodb", + "tablename": "someTableName", + "resource_names": "INSERT someTableName", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "event_name": "INSERT", + "event_version": "1.1", + "event_source_arn": "arn:aws:dynamodb:us-east-1:1234567890:table/someTableName/stream/2024-12-11T20:00:00.000", + "event_id": "0123456789abcdef09123456789abcdef", + "stream_view_type": "KEYS_ONLY", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-cjs-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "size_bytes": 37, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-cjs-timeout", + "service": "integration-tests-js-local-cjs-timeout", + "type": "serverless", + "error": 1, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-cjs-timeout", + "functionname": "integration-tests-js-local-cjs-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "dynamodb", + "function_trigger.event_source_arn": "arn:aws:dynamodb:us-east-1:1234567890:table/someTableName/stream/2024-12-11T20:00:00.000", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-cjs-timeout", + "error": 0, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +END RequestId: XXXX +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-cjs-timeout", + "resource:integration-tests-js-local-cjs-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.s3", + "resource": "my-bucket-name", + "service": "remappedS3ServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-cjs-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "_dd.origin": "lambda", + "service": "remappedS3ServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.s3", + "resource_names": "my-bucket-name", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "bucketname": "my-bucket-name", + "bucket_arn": "arn:aws:s3:::my-bucket-name", + "event_name": "ObjectCreated:CompleteMultipartUpload", + "object_key": "multipart_object.txt", + "object_etag": "09876543210987654321098765432109-2", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-cjs-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "object_size": 8388608, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-cjs-timeout", + "service": "integration-tests-js-local-cjs-timeout", + "type": "serverless", + "error": 1, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-cjs-timeout", + "functionname": "integration-tests-js-local-cjs-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "s3", + "function_trigger.event_source_arn": "arn:aws:s3:::my-bucket-name", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-cjs-timeout", + "error": 0, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-cjs-timeout", + "resource:integration-tests-js-local-cjs-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.s3", + "resource": "my-bucket-name", + "service": "remappedS3ServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-cjs-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "_dd.origin": "lambda", + "service": "remappedS3ServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.s3", + "resource_names": "my-bucket-name", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "bucketname": "my-bucket-name", + "bucket_arn": "arn:aws:s3:::my-bucket-name", + "event_name": "ObjectCreated:Copy", + "object_key": "copied_object.txt", + "object_etag": "01234567890123456789012345678901", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-cjs-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "object_size": 100, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-cjs-timeout", + "service": "integration-tests-js-local-cjs-timeout", + "type": "serverless", + "error": 1, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-cjs-timeout", + "functionname": "integration-tests-js-local-cjs-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "s3", + "function_trigger.event_source_arn": "arn:aws:s3:::my-bucket-name", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-cjs-timeout", + "error": 0, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-cjs-timeout", + "resource:integration-tests-js-local-cjs-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.s3", + "resource": "my-bucket-name", + "service": "remappedS3ServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-cjs-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "_dd.origin": "lambda", + "service": "remappedS3ServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.s3", + "resource_names": "my-bucket-name", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "bucketname": "my-bucket-name", + "bucket_arn": "arn:aws:s3:::my-bucket-name", + "event_name": "ObjectCreated:Put", + "object_key": "test_object.txt", + "object_etag": "abcdef0123456789abcdef01234567890", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-cjs-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "object_size": 100, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-cjs-timeout", + "service": "integration-tests-js-local-cjs-timeout", + "type": "serverless", + "error": 1, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-cjs-timeout", + "functionname": "integration-tests-js-local-cjs-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "s3", + "function_trigger.event_source_arn": "arn:aws:s3:::my-bucket-name", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-cjs-timeout", + "error": 0, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-cjs-timeout", + "resource:integration-tests-js-local-cjs-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.sns", + "resource": "sns-lambda", + "service": "remappedSnsServiceName", + "type": "sns", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-cjs-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "_dd.origin": "lambda", + "service": "remappedSnsServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.sns", + "resource_names": "sns-lambda", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "type": "Notification", + "subject": "TestInvoke", + "message_id": "95df01b4-ee98-5cb9-9903-4c221d41eb5e", + "topicname": "sns-lambda", + "topic_arn": "arn:aws:sns:us-east-2:123456789012:sns-lambda", + "event_subscription_arn": "arn:aws:sns:us-east-2:123456789012:sns-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-cjs-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-cjs-timeout", + "service": "integration-tests-js-local-cjs-timeout", + "type": "serverless", + "error": 1, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-cjs-timeout", + "functionname": "integration-tests-js-local-cjs-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "sns", + "function_trigger.event_source_arn": "arn:aws:sns:us-east-2:123456789012:sns-lambda", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-cjs-timeout", + "error": 0, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-cjs-timeout", + "resource:integration-tests-js-local-cjs-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.sqs", + "resource": "my-queue", + "service": "remappedSqsServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-cjs-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "_dd.origin": "lambda", + "service": "remappedSqsServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.sqs", + "resource_names": "my-queue", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "queuename": "my-queue", + "event_source_arn": "arn:aws:sqs:us-east-2:123456789012:my-queue", + "receipt_handle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", + "sender_id": "AIDAIENQZJOLO23YVJ4VO", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-cjs-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "retry_count": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-cjs-timeout", + "service": "integration-tests-js-local-cjs-timeout", + "type": "serverless", + "error": 1, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-cjs-timeout", + "functionname": "integration-tests-js-local-cjs-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "sqs", + "function_trigger.event_source_arn": "arn:aws:sqs:us-east-2:123456789012:my-queue", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-cjs-timeout", + "error": 0, + "meta": { + "_dd.origin": "lambda", + "version": "1.0.0", + "service": "integration-tests-js-local-cjs-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB diff --git a/integration_tests_local/snapshots/logs/manual-timeout.log b/integration_tests_local/snapshots/logs/manual-timeout.log new file mode 100644 index 00000000..a3580052 --- /dev/null +++ b/integration_tests_local/snapshots/logs/manual-timeout.log @@ -0,0 +1,1228 @@ +XXXX [INFO] (rapid) exec '/lambda-entrypoint.sh' (cwd=/var/task, handler=timeout.handle) +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: init) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-manual-timeout", + "resource:integration-tests-js-local-manual-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.apigateway", + "resource": "GET /{proxy+}", + "service": "remappedApiGatewayServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-manual-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "service": "remappedApiGatewayServiceName", + "runtime-id":"XXXX", + "http.url": "https://undefined", + "resource_names": "GET /{proxy+}", + "request_id":"XXXX", + "span.kind": "server", + "apiid":"XXXX", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "sync", + "http.method": "GET", + "stage": "test", + "domain_name": "", + "dd_resource_key": "arn:aws:apigateway:us-east-1::/restapis/wt6mne2s9k", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-manual-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-manual-timeout", + "service": "integration-tests-js-local-manual-timeout", + "type": "serverless", + "error": 1, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-manual-timeout", + "functionname": "integration-tests-js-local-manual-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "api-gateway", + "function_trigger.event_source_arn": "arn:aws:apigateway:us-east-1::/restapis/wt6mne2s9k/stages/test", + "http.method": "GET", + "http.route": "/{proxy+}", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-manual-timeout", + "error": 0, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +END RequestId: XXXX +REPORT RequestId: XXXX Init Duration: XXXX ms Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-manual-timeout", + "resource:integration-tests-js-local-manual-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.dynamodb", + "resource": "MODIFY someTableName", + "service": "remappedDynamoDbServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-manual-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "service": "remappedDynamoDbServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.dynamodb", + "tablename": "someTableName", + "resource_names": "MODIFY someTableName", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "event_name": "MODIFY", + "event_version": "1.1", + "event_source_arn": "arn:aws:dynamodb:us-east-1:1234567890:table/someTableName/stream/2024-12-11T20:00:00.000", + "event_id": "0123456789abcdef09123456789abcdef", + "stream_view_type": "KEYS_ONLY", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-manual-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "size_bytes": 37, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-manual-timeout", + "service": "integration-tests-js-local-manual-timeout", + "type": "serverless", + "error": 1, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-manual-timeout", + "functionname": "integration-tests-js-local-manual-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "dynamodb", + "function_trigger.event_source_arn": "arn:aws:dynamodb:us-east-1:1234567890:table/someTableName/stream/2024-12-11T20:00:00.000", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-manual-timeout", + "error": 0, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-manual-timeout", + "resource:integration-tests-js-local-manual-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.dynamodb", + "resource": "REMOVE someTableName", + "service": "remappedDynamoDbServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-manual-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "service": "remappedDynamoDbServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.dynamodb", + "tablename": "someTableName", + "resource_names": "REMOVE someTableName", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "event_name": "REMOVE", + "event_version": "1.1", + "event_source_arn": "arn:aws:dynamodb:us-east-1:1234567890:table/someTableName/stream/2024-12-11T20:00:00.000", + "event_id": "0123456789abcdef09123456789abcdef", + "stream_view_type": "KEYS_ONLY", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-manual-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "size_bytes": 37, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-manual-timeout", + "service": "integration-tests-js-local-manual-timeout", + "type": "serverless", + "error": 1, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-manual-timeout", + "functionname": "integration-tests-js-local-manual-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "dynamodb", + "function_trigger.event_source_arn": "arn:aws:dynamodb:us-east-1:1234567890:table/someTableName/stream/2024-12-11T20:00:00.000", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-manual-timeout", + "error": 0, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-manual-timeout", + "resource:integration-tests-js-local-manual-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.dynamodb", + "resource": "INSERT someTableName", + "service": "remappedDynamoDbServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-manual-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "service": "remappedDynamoDbServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.dynamodb", + "tablename": "someTableName", + "resource_names": "INSERT someTableName", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "event_name": "INSERT", + "event_version": "1.1", + "event_source_arn": "arn:aws:dynamodb:us-east-1:1234567890:table/someTableName/stream/2024-12-11T20:00:00.000", + "event_id": "0123456789abcdef09123456789abcdef", + "stream_view_type": "KEYS_ONLY", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-manual-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "size_bytes": 37, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-manual-timeout", + "service": "integration-tests-js-local-manual-timeout", + "type": "serverless", + "error": 1, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-manual-timeout", + "functionname": "integration-tests-js-local-manual-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "dynamodb", + "function_trigger.event_source_arn": "arn:aws:dynamodb:us-east-1:1234567890:table/someTableName/stream/2024-12-11T20:00:00.000", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-manual-timeout", + "error": 0, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-manual-timeout", + "resource:integration-tests-js-local-manual-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.s3", + "resource": "my-bucket-name", + "service": "remappedS3ServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-manual-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "service": "remappedS3ServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.s3", + "resource_names": "my-bucket-name", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "bucketname": "my-bucket-name", + "bucket_arn": "arn:aws:s3:::my-bucket-name", + "event_name": "ObjectCreated:CompleteMultipartUpload", + "object_key": "multipart_object.txt", + "object_etag": "09876543210987654321098765432109-2", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-manual-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "object_size": 8388608, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-manual-timeout", + "service": "integration-tests-js-local-manual-timeout", + "type": "serverless", + "error": 1, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-manual-timeout", + "functionname": "integration-tests-js-local-manual-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "s3", + "function_trigger.event_source_arn": "arn:aws:s3:::my-bucket-name", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-manual-timeout", + "error": 0, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +END RequestId: XXXX +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-manual-timeout", + "resource:integration-tests-js-local-manual-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.s3", + "resource": "my-bucket-name", + "service": "remappedS3ServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-manual-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "service": "remappedS3ServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.s3", + "resource_names": "my-bucket-name", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "bucketname": "my-bucket-name", + "bucket_arn": "arn:aws:s3:::my-bucket-name", + "event_name": "ObjectCreated:Copy", + "object_key": "copied_object.txt", + "object_etag": "01234567890123456789012345678901", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-manual-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "object_size": 100, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-manual-timeout", + "service": "integration-tests-js-local-manual-timeout", + "type": "serverless", + "error": 1, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-manual-timeout", + "functionname": "integration-tests-js-local-manual-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "s3", + "function_trigger.event_source_arn": "arn:aws:s3:::my-bucket-name", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-manual-timeout", + "error": 0, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-manual-timeout", + "resource:integration-tests-js-local-manual-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.s3", + "resource": "my-bucket-name", + "service": "remappedS3ServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-manual-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "service": "remappedS3ServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.s3", + "resource_names": "my-bucket-name", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "bucketname": "my-bucket-name", + "bucket_arn": "arn:aws:s3:::my-bucket-name", + "event_name": "ObjectCreated:Put", + "object_key": "test_object.txt", + "object_etag": "abcdef0123456789abcdef01234567890", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-manual-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "object_size": 100, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-manual-timeout", + "service": "integration-tests-js-local-manual-timeout", + "type": "serverless", + "error": 1, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-manual-timeout", + "functionname": "integration-tests-js-local-manual-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "s3", + "function_trigger.event_source_arn": "arn:aws:s3:::my-bucket-name", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-manual-timeout", + "error": 0, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-manual-timeout", + "resource:integration-tests-js-local-manual-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.sns", + "resource": "sns-lambda", + "service": "remappedSnsServiceName", + "type": "sns", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-manual-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "service": "remappedSnsServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.sns", + "resource_names": "sns-lambda", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "type": "Notification", + "subject": "TestInvoke", + "message_id": "95df01b4-ee98-5cb9-9903-4c221d41eb5e", + "topicname": "sns-lambda", + "topic_arn": "arn:aws:sns:us-east-2:123456789012:sns-lambda", + "event_subscription_arn": "arn:aws:sns:us-east-2:123456789012:sns-lambda:21be56ed-a058-49f5-8c98-aedd2564c486", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-manual-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-manual-timeout", + "service": "integration-tests-js-local-manual-timeout", + "type": "serverless", + "error": 1, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-manual-timeout", + "functionname": "integration-tests-js-local-manual-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "sns", + "function_trigger.event_source_arn": "arn:aws:sns:us-east-2:123456789012:sns-lambda", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-manual-timeout", + "error": 0, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB +START RequestId: XXXX Version: $LATEST +XXXX [INFO] (rapid) INIT START(type: on-demand, phase: invoke) +XXXX [INFO] (rapid) The extension's directory "/opt/extensions" does not exist, assuming no extensions to be loaded. +XXXX [INFO] (rapid) Starting runtime without AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN , Expected?: false +XXXX [INFO] (rapid) INIT RTDONE(status: success) +XXXX [INFO] (rapid) INIT REPORT(durationMs: XXXX) +XXXX [INFO] (rapid) INVOKE START(requestId: XXXX) +{ + "e": XXXX, + "m": "aws.lambda.enhanced.invocations", + "t": [ + "region:us-east-1", + "account_id:XXXX", + "functionname:integration-tests-js-local-manual-timeout", + "resource:integration-tests-js-local-manual-timeout", + "memorysize:3008", + "cold_start:true", + "datadog_lambda:vX.X.X", + "runtime:nodejsXX.x" + ], + "v": 1 +} +{ + "traces": [ + [ + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.sqs", + "resource": "my-queue", + "service": "remappedSqsServiceName", + "type": "web", + "error": 0, + "meta": { + "_dd.tags.process": "entrypoint.type:script,entrypoint.workdir:task,package.json.name:container-cjs-test,svc.auto:integration-tests-js-local-manual-timeout", + "_dd.p.tid": "XXXX", + "_dd.p.dm": "-0", + "service": "remappedSqsServiceName", + "runtime-id":"XXXX", + "operation_name": "aws.sqs", + "resource_names": "my-queue", + "request_id":"XXXX", + "span.kind": "server", + "_inferred_span.tag_source": "self", + "_inferred_span.synchronicity": "async", + "queuename": "my-queue", + "event_source_arn": "arn:aws:sqs:us-east-2:123456789012:my-queue", + "receipt_handle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", + "sender_id": "AIDAIENQZJOLO23YVJ4VO", + "_dd.integration": "opentracing", + "_dd.svc_src": "m", + "_dd.base_service": "integration-tests-js-local-manual-timeout", + "language": "javascript" + }, + "metrics": { + "_dd.agent_psr": 1, + "_dd.top_level": 1, + "_dd.measured": 1, + "retry_count": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "aws.lambda", + "resource": "integration-tests-js-local-manual-timeout", + "service": "integration-tests-js-local-manual-timeout", + "type": "serverless", + "error": 1, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "span.kind": "server", + "cold_start": "true", + "function_arn":"XXXX", + "function_version": "$LATEST", + "request_id":"XXXX", + "resource_names": "integration-tests-js-local-manual-timeout", + "functionname": "integration-tests-js-local-manual-timeout", + "datadog_lambda":"XXXX", + "dd_trace":"XXXX", + "function_trigger.event_source": "sqs", + "function_trigger.event_source_arn": "arn:aws:sqs:us-east-2:123456789012:my-queue", + "error.message": "Datadog detected an impending timeout", + "error.type": "Impending Timeout", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + }, + { + "trace_id":"XXXX", + "span_id":"XXXX", + "parent_id":"XXXX", + "name": "timeout.unfinished", + "resource": "timeout.unfinished", + "service": "integration-tests-js-local-manual-timeout", + "error": 0, + "meta": { + "version": "1.0.0", + "service": "integration-tests-js-local-manual-timeout", + "runtime-id":"XXXX", + "_dd.integration": "opentracing", + "language": "javascript" + }, + "metrics": { + "_dd.measured": 1, + "process_id":XXXX, + "_sampling_priority_v1": 1 + }, + "start":XXXX, + "duration":XXXX + } + ] + ] +} +XXXX [ERROR] (rapid) Invoke failed InvokeID=XXXX error=errResetReceived +XXXX [WARNING] (rapid) Reset initiated: Timeout +XXXX [INFO] (rapid) Sending SIGKILL to runtime-XX(XX). +XXXX [INFO] (rapid) Waiting for runtime domain processes termination +END RequestId: XXXX +REPORT RequestId: XXXX Duration: XXXX ms Billed Duration: XXXX ms Memory Size: 3008 MB Max Memory Used: XXXX MB diff --git a/integration_tests_local/snapshots/return_values/cjs-timeout.txt b/integration_tests_local/snapshots/return_values/cjs-timeout.txt new file mode 100644 index 00000000..a0f172e4 --- /dev/null +++ b/integration_tests_local/snapshots/return_values/cjs-timeout.txt @@ -0,0 +1 @@ +Task timed out after 5.00 seconds diff --git a/integration_tests_local/snapshots/return_values/manual-throw-error_node24.json b/integration_tests_local/snapshots/return_values/manual-throw-error_node24.json index 997d8531..89615645 100644 --- a/integration_tests_local/snapshots/return_values/manual-throw-error_node24.json +++ b/integration_tests_local/snapshots/return_values/manual-throw-error_node24.json @@ -1 +1 @@ -{"errorType":"Error","errorMessage":"Hello","trace":["Error: Hello"," at handle (/var/task/throw-error.js:XXX:XXX)"," at /var/task/node_modules/datadog-lambda-js/dist/utils/handler.js:XXX:XXX"," at traceListenerOnWrap (/var/task/node_modules/datadog-lambda-js/dist/index.js:XXX:XXX)"," at BufferedInvokeProcessor.wrappedFunc [as handler] (/var/task/node_modules/datadog-lambda-js/dist/index.js:XXX:XXX)"," at async BufferedInvokeProcessor.processInvoke (file:///var/runtime/index.mjs:XXX:XXX)"," at async _Runtime.processSingleConcurrent (file:///var/runtime/index.mjs:XXX:XXX)"," at async _Runtime.start (file:///var/runtime/index.mjs:XXX:XXX)"," at async ignition (file:///var/runtime/index.mjs:XXX:XXX)"]} +{"errorType":"Error","errorMessage":"Hello","trace":["Error: Hello"," at handle (/var/task/throw-error.js:XXX:XXX)"," at /var/task/node_modules/datadog-lambda-js/dist/utils/handler.js:XXX:XXX"," at traceListenerOnWrap (/var/task/node_modules/datadog-lambda-js/dist/index.js:XXX:XXX)"," at BufferedInvokeProcessor.wrappedFunc [as handler] (/var/task/node_modules/datadog-lambda-js/dist/index.js:XXX:XXX)"," at async BufferedInvokeProcessor.processInvoke (file:///var/runtime/index.mjs:XXX:XXX)"," at async _Runtime.processSingleConcurrent (file:///var/runtime/index.mjs:XXX:XXX)"," at async _Runtime.start (file:///var/runtime/index.mjs:XXX:XXX)"," at async ignition (file:///var/runtime/index.mjs:XXX:XXX)"],"requestId":"XXXX"} diff --git a/integration_tests_local/snapshots/return_values/manual-timeout.txt b/integration_tests_local/snapshots/return_values/manual-timeout.txt new file mode 100644 index 00000000..a0f172e4 --- /dev/null +++ b/integration_tests_local/snapshots/return_values/manual-timeout.txt @@ -0,0 +1 @@ +Task timed out after 5.00 seconds