Repository navigation
feat(traces): one trace link form, ?traceId=&traceType=<trace source> - #205
Merged
Merged
Conversation
wankai123
previously approved these changes
Oct 22, 2026
wu-sheng
force-pushed
the
feat/trace-popout-store
branch
from
October 22, 2026 13:49
5d60bf7 to
3bd4892
Compare
Every trace link is `?traceId=<id>&traceType=<source>`, where the source is one of the names a layer template's `traces.sources` uses — native, zipkin, traceql-native, traceql-zipkin, traceql-otlp — and names the OAP query that reads the trace. Each popout opens only for its own source; a link naming none, or an unknown one, opens a notice that offers each source to query. `source=`, `traceqlId`/`ds`/`traceqlSpanId`, `evaluationTraceId` and the old `traceType=SKYWALKING_NATIVE|OTLP` markers are gone. - Copy buttons, evaluation records, record lists, span refs and log rows all write the new form; log rows name the source of the page's own traces. - The Evaluation records tab reads its trace condition from a trace link once, when the page opens or moves to another group, and no longer writes it. - An id a Zipkin source cannot hold reads "No trace with that id." at once, in both popouts and Pick span…, instead of a failed request or "The trace source is not answering."; the BFF checks it by Zipkin's id rule before asking OAP, so a real OAP 400 stays a failure. - Layer dashboard editor: Save keeps an empty grid the template began with, so Reset to bundled, then Save, writes the bundled template and Check diff & push can publish it; a test holds every bundled layer template to that. - CI: the e2e cases run on ubuntu-24.04. ubuntu-latest is moving to 26.04, where kind cannot load the multi-platform OAP image into its node, so the kind cases (istio, deployment) failed before any test ran.
wu-sheng
force-pushed
the
feat/trace-popout-store
branch
from
October 22, 2026 13:49
3bd4892 to
3831847
Compare
wankai123
approved these changes
Oct 22, 2026
wu-sheng
added a commit
that referenced
this pull request
Oct 23, 2026
…ages per platform
Docker 29 (ubuntu-26.04 runners) uses the containerd image store, where a
pulled multi-platform image holds only the host platform; importing every
platform into kind failed for the OAP image ("content digest ... not
found") and, on the containerd 1.7 kindest/node:v1.28.15 these cases pin,
for the Rover image, whose attestation manifests do not unpack as images
("mismatched image rootfs and manifest layers"). infra-e2e now saves and
imports only the node platform (apache/skywalking-infra-e2e#150, #151), so
the e2e cases follow ubuntu-latest again instead of the ubuntu-24.04 pin
#205 added.
wu-sheng
added a commit
that referenced
this pull request
Oct 23, 2026
…ages per platform
Docker 29 (ubuntu-26.04 runners) uses the containerd image store, where a
pulled multi-platform image holds only the host platform; importing every
platform into kind failed for the OAP image ("content digest ... not
found") and, on the containerd 1.7 kindest/node:v1.28.15 these cases pin,
for the Rover image, whose attestation manifests do not unpack as images
("mismatched image rootfs and manifest layers"). infra-e2e now saves only the node platform and leaves attestation
manifests out of the archive (apache/skywalking-infra-e2e#150, #151), so
the e2e cases follow ubuntu-latest again instead of the ubuntu-24.04 pin
#205 added.
wu-sheng
added a commit
that referenced
this pull request
Oct 23, 2026
…ages per platform
Docker 29 (ubuntu-26.04 runners) uses the containerd image store, where a
pulled multi-platform image holds only the host platform; importing every
platform into kind failed for the OAP image ("content digest ... not
found"). Saved for one platform, the archive also lists the image's
referrers, such as attestations, at its top level, and the containerd 1.7
kindest/node:v1.28.15 these cases pin imports each one as an image, which
failed for the Rover image ("mismatched image rootfs and manifest layers").
infra-e2e now saves only the node platform and leaves the referrers out of
the archive (apache/skywalking-infra-e2e#150, #151), so the e2e cases follow
ubuntu-latest again instead of the ubuntu-24.04 pin #205 added.
wu-sheng
added a commit
that referenced
this pull request
Oct 23, 2026
…ages per platform
Docker 29 (ubuntu-26.04 runners) uses the containerd image store, where a
pulled multi-platform image holds only the host platform; importing every
platform into kind failed for the OAP image ("content digest ... not
found"). Saved for one platform, the archive also lists the image's
referrers, such as attestations, at its top level, and the containerd 1.7
kindest/node:v1.28.15 these cases pin imports each one as an image, which
failed for the Rover image ("mismatched image rootfs and manifest layers").
infra-e2e now saves only the node platform and leaves the referrers out of
the archive (apache/skywalking-infra-e2e#150, #151), so the e2e cases follow
ubuntu-latest again instead of the ubuntu-24.04 pin #205 added.
wu-sheng
added a commit
that referenced
this pull request
Oct 23, 2026
…ges per platform
Docker 29 (ubuntu-26.04 runners) uses the containerd image store, where a
pulled multi-platform image holds only the host platform; importing every
platform into kind failed for the OAP image ("content digest ... not
found"). Saved for one platform, the archive also lists the image's
referrers, such as attestations, at its top level, and the containerd 1.7
kindest/node:v1.28.15 these cases pin imports each one as an image, which
failed for the Rover image ("mismatched image rootfs and manifest layers").
infra-e2e now saves only the node platform and leaves the referrers out of
the archive (apache/skywalking-infra-e2e#150, #151), so the e2e cases leave
the ubuntu-24.04 pin #205 added.
The CI and e2e jobs name ubuntu-26.04 rather than ubuntu-latest:
ubuntu-latest jobs sat queued with no runner while jobs naming ubuntu-24.04
or ubuntu-26.04 started within seconds.
wu-sheng
added a commit
that referenced
this pull request
Oct 23, 2026
…ges per platform
Docker 29 (ubuntu-26.04 runners) uses the containerd image store, where a
pulled multi-platform image holds only the host platform; importing every
platform into kind failed for the OAP image ("content digest ... not
found"). Saved for one platform, the archive also lists the image's
referrers, such as attestations, at its top level, and the containerd 1.7
kindest/node:v1.28.15 these cases pin imports each one as an image, which
failed for the Rover image ("mismatched image rootfs and manifest layers").
infra-e2e now saves only the node platform and leaves the referrers out of
the archive (apache/skywalking-infra-e2e#150, #151), so the e2e cases leave
the ubuntu-24.04 pin #205 added.
The CI and e2e jobs name ubuntu-26.04 rather than ubuntu-latest:
ubuntu-latest jobs sat queued with no runner while jobs naming ubuntu-24.04
or ubuntu-26.04 started within seconds.
The istio mesh spec accepts `UNKNOWN` as the service the MESH header opens
on. Since the e2e OAP pin moved past apache/skywalking#14135 (#204), OAP
reads the Kubernetes metadata of a new pod address in the background, so
bookinfo's first calls count under `UNKNOWN`; in the first minute of traffic
that burst can rank first by calls per minute, and the header then picks
it. It failed so on main at ed6171d (ubuntu-24.04) as well as here.
wu-sheng
added a commit
that referenced
this pull request
Oct 23, 2026
…ges per platform
Docker 29 (ubuntu-26.04 runners) uses the containerd image store, where a
pulled multi-platform image holds only the host platform; importing every
platform into kind failed for the OAP image ("content digest ... not
found"). Saved for one platform, the archive also lists the image's
referrers, such as attestations, at its top level, and the containerd 1.7
kindest/node:v1.28.15 these cases pin imports each one as an image, which
failed for the Rover image ("mismatched image rootfs and manifest layers").
infra-e2e now saves only the node platform and leaves the referrers out of
the archive (apache/skywalking-infra-e2e#150, #151), so the e2e cases leave
the ubuntu-24.04 pin #205 added.
The CI and e2e jobs name ubuntu-26.04 rather than ubuntu-latest:
ubuntu-latest jobs sat queued with no runner while jobs naming ubuntu-24.04
or ubuntu-26.04 started within seconds.
The istio mesh and eBPF profiling specs accept `UNKNOWN` as the service
the MESH header opens on (MESH_HEADER_SERVICES; MESH_SERVICES still lists
only the real workloads). Since the e2e OAP pin moved past
apache/skywalking#14135 (#204), OAP reads the Kubernetes metadata of a new
pod address in the background, so bookinfo's first calls count under
`UNKNOWN`; in the first minute of traffic that burst can rank first by
calls per minute, and the header then picks it. It failed so on main at
ed6171d (ubuntu-24.04) as well as here. A mesh whose calls all count
under `UNKNOWN` still fails: the mesh spec requires every bookinfo peer in
the service picker.
wu-sheng
added a commit
that referenced
this pull request
Oct 23, 2026
…ges per platform
Docker 29 (ubuntu-26.04 runners) uses the containerd image store, where a
pulled multi-platform image holds only the host platform; importing every
platform into kind failed for the OAP image ("content digest ... not
found"). Saved for one platform, the archive also lists the image's
referrers, such as attestations, at its top level, and the containerd 1.7
kindest/node:v1.28.15 these cases pin imports each one as an image, which
failed for the Rover image ("mismatched image rootfs and manifest layers").
infra-e2e now saves only the node platform and leaves the referrers out of
the archive (apache/skywalking-infra-e2e#150, #151), so the e2e cases leave
the ubuntu-24.04 pin #205 added.
The CI and e2e jobs name ubuntu-26.04 rather than ubuntu-latest:
ubuntu-latest jobs sat queued with no runner while jobs naming ubuntu-24.04
or ubuntu-26.04 started within seconds.
The istio mesh fixture is fully known, so its specs now require all of it
and accept only `UNKNOWN` beyond it. The mesh spec asserts the service
picker lists exactly the five workloads (bookinfo's four and the ingress
gateway) plus, optionally, `UNKNOWN`; the topology spec requires a node for
each workload by name; and the roster readiness check waits until Horizon
lists all five. MESH_PEERS, which left `ratings` out, is gone.
`UNKNOWN` is accepted as the service the MESH header opens on
(MESH_HEADER_SERVICES, in the mesh and eBPF profiling specs). Since the e2e
OAP pin moved past apache/skywalking#14135 (#204), OAP reads the Kubernetes
metadata of a new pod address in the background, so bookinfo's first calls
count under `UNKNOWN`; in the first minute of traffic that burst can rank
first by calls per minute, and the header then picks it. It failed so on
main at ed6171d (ubuntu-24.04) as well as here.
wu-sheng
added a commit
that referenced
this pull request
Oct 23, 2026
…ges per platform
Docker 29 (ubuntu-26.04 runners) uses the containerd image store, where a
pulled multi-platform image holds only the host platform; importing every
platform into kind failed for the OAP image ("content digest ... not
found"). Saved for one platform, the archive also lists the image's
referrers, such as attestations, at its top level, and the containerd 1.7
kindest/node:v1.28.15 these cases pin imports each one as an image, which
failed for the Rover image ("mismatched image rootfs and manifest layers").
infra-e2e now saves only the node platform and leaves the referrers out of
the archive (apache/skywalking-infra-e2e#150, #151), so the e2e cases leave
the ubuntu-24.04 pin #205 added.
The CI and e2e jobs name ubuntu-26.04 rather than ubuntu-latest:
ubuntu-latest jobs sat queued with no runner while jobs naming ubuntu-24.04
or ubuntu-26.04 started within seconds.
The istio mesh fixture is fully known, so its specs now require all of it
and accept only `UNKNOWN` beyond it. The mesh spec asserts the service
picker lists exactly the five workloads (bookinfo's four and the ingress
gateway) plus, optionally, `UNKNOWN`; the topology spec requires a node for
each workload by name; and the roster readiness check waits until Horizon
lists all five. MESH_PEERS, which left `ratings` out, is gone.
`UNKNOWN` is accepted as the service the MESH header opens on
(MESH_HEADER_SERVICES, in the mesh and eBPF profiling specs). Since the e2e
OAP pin moved past apache/skywalking#14135 (#204), OAP reads the Kubernetes
metadata of a new pod address in the background, so bookinfo's first calls
count under `UNKNOWN`; in the first minute of traffic that burst can rank
first by calls per minute, and the header then picks it. It failed so on
main at ed6171d (ubuntu-24.04) as well as here.
wu-sheng
added a commit
that referenced
this pull request
Oct 23, 2026
…ges per platform (#206) Docker 29 (ubuntu-26.04 runners) uses the containerd image store, where a pulled multi-platform image holds only the host platform; importing every platform into kind failed for the OAP image ("content digest ... not found"). Saved for one platform, the archive also lists the image's referrers, such as attestations, at its top level, and the containerd 1.7 kindest/node:v1.28.15 these cases pin imports each one as an image, which failed for the Rover image ("mismatched image rootfs and manifest layers"). infra-e2e now saves only the node platform and leaves the referrers out of the archive (apache/skywalking-infra-e2e#150, #151), so the e2e cases leave the ubuntu-24.04 pin #205 added. The CI and e2e jobs name ubuntu-26.04 rather than ubuntu-latest: ubuntu-latest jobs sat queued with no runner while jobs naming ubuntu-24.04 or ubuntu-26.04 started within seconds. The istio mesh fixture is fully known, so its specs now require all of it and accept only `UNKNOWN` beyond it. The mesh spec asserts the service picker lists exactly the five workloads (bookinfo's four and the ingress gateway) plus, optionally, `UNKNOWN`; the topology spec requires a node for each workload by name; and the roster readiness check waits until Horizon lists all five. MESH_PEERS, which left `ratings` out, is gone. `UNKNOWN` is accepted as the service the MESH header opens on (MESH_HEADER_SERVICES, in the mesh and eBPF profiling specs). Since the e2e OAP pin moved past apache/skywalking#14135 (#204), OAP reads the Kubernetes metadata of a new pod address in the background, so bookinfo's first calls count under `UNKNOWN`; in the first minute of traffic that burst can rank first by calls per minute, and the header then picks it. It failed so on main at ed6171d (ubuntu-24.04) as well as here.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
A trace could be linked four different ways —
?traceId=with a page-decided popout,&source=native|zipkinfrom the copy buttons,&traceType=SKYWALKING_NATIVE|OTLPmarkers (whereOTLPmeant the Zipkin popout), and?traceqlId=&ds=for TraceQL — plus?evaluationTraceId=on the Evaluation records tab. A link without a marker opened in whatever popout the page guessed, so a trace could be read from a store it is not in and shown as empty. This makes one form for every trace link, names the query that reads it, and stops guessing.What
One link form:
?traceId=<id>&traceType=<source>. The source is one of the names a layer template'straces.sourcesalready uses, and says which OAP query reads the trace:native(native trace query),zipkin(Zipkin query API),traceql-native/traceql-zipkin/traceql-otlp(TraceQL over that datasource). Span keys (traceSegmentId,traceSpanIndex,traceSpanId) and the window keys (traceAt,traceEnd,traceLookback) are unchanged.traceId=X&source=nativetraceId=X&traceType=native…&source=zipkin&traceAt=T…&traceType=zipkin&traceAt=TtraceqlId=X&ds=DtraceId=X&traceType=traceql-DSKYWALKING_NATIVE/OTLP(Zipkin) /traceqlId=X&ds=otlp&traceqlSpanId=Snative/zipkin/traceId=X&traceType=traceql-otlp&traceSpanId=SSKYWALKING_NATIVE/OTLP/traceqlId&ds/ no store: bare idrecordTrace.source/ no store: bare idtraceId=XtraceId=X&traceType=nativetraceId=X&traceAt=TtraceId=X&traceType=<the page's source>&traceAt=T?evaluationTraceId=X, written as you typetraceType, or a value outside the five, opens a notice (TraceLinkNotice) that shows the id and the bad value and offers one button per source; the button setstraceTypeon the same link. Nothing falls back to a page default any more.recordTrace— the bundled General, MySQL, PostgreSQL, Redis, Virtual Database and Virtual Cache lists among them — now opens that notice instead of the layer's popout. Bundled templates are untouched; the 1.1.0 changelog carries a Breaking entry with how to set the store.normalizeZipkinTraceId, mirroring OAP'sSpan.normalizeTraceId) before asking OAP — the Zipkin trace route and the TraceQLzipkindatasource only — and answersnotFound+invalidId; a 400 OAP itself returns stays a failure.operate/traces.md,operate/genai-evaluation.md,components/dashboard-widgets.md,customization/layer-templates.md; 1.1.0 changelog; new notice strings in all 8 locales.e2e
genai: URL checks use the new values; the trace-condition spec opens the tab from a trace link, closes the popout, and checks the condition was filled.ui/trace-deeplink: names the source, and adds bare id → notice → picknative→ waterfall.istio/zipkin-traces: nameszipkin.ui/popouts: a log-row link namesnative.ubuntu-24.04.ubuntu-latestis moving to 26.04 (Oct 19 – Nov 19, 2026), where kind cannot load the multi-platform OAP image into its node (ctr images import --all-platforms: content digest not found), so the kind cases (istio, deployment) failed before any test ran; the compose cases pass on either image. 24.04 stays supported while it is one of the two latest images.Validation
pnpm -r run type-check, UI and BFF builds,pnpm lint(repo-wide gate: i18n parity, docs links, source budget, design tokens, security, template + i18n validation), e2e spec type-check, license headers — green.pnpm -r run test:unit: api-client 201, conversation-view 163, BFF 2178, UI 1627.zipkinandtraceql-zipkin; copy buttons on Trace inspect writing and reopening the new form; Istio Managed SVCs Reset to bundled → Save enabling Check diff & push (not pushed).genaibrowser specs passed 9/9 against the local e2e stack. Not re-run on the final commit: the local Docker engine stopped answering, so the e2e cases are left to CI.