You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat(serverless-init): wire MicroVM CloudService into main.go and register it
GetCloudServiceType now returns &MicroVM{} when DD_AWS_MICROVM_IMAGE_ARN
is set (checked before the amd64-only arch gate, since MicroVM also
supports arm64).
main.go's setup() builds a LifecycleContext from the telemetry
dependencies it already constructs (metric/trace/log flushers, base log
and trace tags) and passes it via TracingContext.LifecycleCtx so
MicroVM.Init can start the lifecycle server. This runs even on the
no-API-key path, since MicroVM's lifecycle handshake must complete
regardless of whether trace/metric collection is enabled — other cloud
services are not initialized on that path to avoid nil-map panics from
constructing spans with disabled tracing.
Also fixes two issues flagged by Codex review:
- lifecycle.Server.flushAll called s.logsFlusher.Flush(...) unconditionally.
The logsAgent passed through as LifecycleContext.LogsFlusher can be nil
when the logs agent fails to start (SetupLogAgent's error is discarded
in cmd/serverless-init/log/log.go), which would panic during MicroVM's
/suspend and /terminate handshake. Guarded with a nil check, matching
the existing precedent in main.go's lastFlush and flushAll's own
sampleDrainer handling. Covered by
TestFlushAllNilLogsFlusherDoesNotPanic.
- TestRun_LocalService_SidecarMode started the real RunSidecar
signal-wait path but never sent a signal or cleaned up, leaking a
goroutine that would intercept SIGTERM for the rest of the test
binary's life — a real SIGTERM (e.g. CI cancellation) could be
swallowed by it instead of terminating the process. Now registers its
own SIGTERM listener first (overriding the default terminate
disposition before signaling), sends itself a real SIGTERM, and
asserts RunSidecar returns.
Restores forwarder/wire/server correctness that this commit
unintentionally dropped relative to its 07-02 base. This branch was
originally built on an older, unrestacked copy of these files before
being reset onto the current 07-02 base; the reset did not refresh the
working tree, so the recommit silently reintroduced pre-fix versions of
several files. None of this was mentioned in the original commit
message, and each item had a test pinning it that was deleted alongside
it:
- forwarder.go: restores the CheckRedirect handler on the forwarder's
http.Client so a 3xx from the user app is mirrored to the platform
as-is instead of silently followed (which would replay a POST hook as
a body-dropped GET). Restores
TestForwarder_PassThrough_DoesNotFollowRedirects.
- wire.go: restores the sidecarMode early-return before parsing
userAppPort and the forward/ready/validate timeouts, so a stale or
colliding value inherited from an init-mode config produces a warning
instead of failing setup in sidecar mode. Restores the three
TestSetupComponents_SidecarMode_* tests.
- server.go: restores writeTimeoutHeadroom (heartbeatStopTimeout +
mirrorResponseTimeout) in the WriteTimeout calculation; restores
unconditional response-body buffering in handleWithForwarder for both
flushParallel (/suspend) and flushSequential (/terminate) — the
/suspend path had silently lost its buffering, risking a partial
mirrored body if the parallel flush outlives forwardTimeout; and
restores the nil-map guard before writing lambda_microvm_id into a
cloned baseTraceTags map. Restores
TestHandleSuspend_WithForwarder_BodyBufferedBeforeFlush and
TestHandleRun_NilBaseTraceTags_DoesNotPanic, and updates the two
WriteTimeout assertions to account for writeTimeoutHeadroom.
- server_test.go: restores go.uber.org/atomic in place of sync/atomic,
per this repo's codereview_guideline.md — the sync/atomic usage had
already been fixed once, per Codex review on an earlier PR in this
stack, before being reintroduced by the same reset.
Verified via `git merge-tree` that these restorations merge cleanly
with the PRs already stacked on top of this branch.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
0 commit comments