v0.19.0 is the biggest and most exciting Parca release yet!
Highlights:
- A complete re-design of the UI. ✨
- All APIs are now served in Apache Arrow format. This completes the migration to being fully Apache Arrow based for ingestion and querying. 📈
- Queries can now filter by arbitrary profile labels (trace ID, customer ID, or whatever else is added to profiling data). 🔍
- Icicle graphs can now group by profile labels (such as thread ID or name). 📊
Aside from that, there are countless performance improvements and bug fixes.
Full Changelog:
- ui-perf: Protobuf long type handled as
Bigint
instead ofstring
on the UI by @manojVivek in #2934 - ui: Redundant query request fix by @manojVivek in #3331
- fix(server): handle gRPC-Web requests over HTTP2 by @maxbrunet in #3352
- ui: Flamegraph crash fix by @manojVivek in #3362
- ui: Fixes the bug where flamegraph goes blank for some instrumented profiles by @manojVivek in #3363
- Allow filtering data by pprof labels by @brancz in #3365
- ui: Handling 0 as a divisor in BigInt divide util by @manojVivek in #3374
- ui/shared/profile/IcicleGraphArrow: Create arrow-based IcicleGraph by @metalmatze in #3326
- ui: Making a default query on initial page load by @manojVivek in #2609
- pkg/debuginfo: Improve debuginfod client by @brancz in #3413
- pkg/query: TestGenerateFlamegraphArrowWithInlined by @metalmatze in #3415
- ui: Passing MetricsGraph variables through Parca Context by @manojVivek in #3439
- parca: add --storage-snapshot-trigger-size by @asubiotto in #3432
- pkg/query: Support unsymbolized profiles with arrow fg by @metalmatze in #3433
- pkg/query: Correctly sum up total cumulative value by @metalmatze in #3440
- pkg/query/flamegraph_arrow: Cast strings to bytes by @metalmatze in #3441
- debuginfo: Add traces by @kakkoyun in #3396
- pkg/debuginfo: Allow user to force a debuginfo upload by @brancz in #3450
- ui: Metrics graph compare fix by @manojVivek in #3455
- Dependency inject the memory.Allocator for rendering by @thorfour in #3461
- ui: Arrow Flamegraph shows pprof labels by @metalmatze in #3460
- ui: value formatter crash fix by @manojVivek in #3467
- Add SortBy and GroupBy actions for Icicle Graphs by @metalmatze in #3479
- Symbolize without intermediate format directly in Apache Arrow format by @brancz in #3519
- pkg/config: Allow configuring to keep only certain sample types by @brancz in #3540
- Fix for panic when building from dictionaries by @thorfour in #3543
- Update badges by @kakkoyun in #3560
- ui: Callgraph undefined diff handled in tooltip by @manojVivek in #3559
- pkg/query: Replace remaining slices.Clone by @brancz in #3565
- pkg/query: Add fast map of strings to json marshaling by @brancz in #3564
- pkg/query: Fix cases where dicts are empty by @brancz in #3580
- ui: UI Build failure fix by @manojVivek in #3591
- flamegraph_arrow: Inject artifical label node by @metalmatze in #3516
- *: Allow uploading debuginfo sources by @brancz in #3590
- Refactor the flamegraphBuilder by @metalmatze in #3594
- pkg/query/flamegraph_arrow: Cast bytes to string when accessing maps keys by @metalmatze in #3597
- feat(snap): add config options to send profiles to a remote store by @jnsgruk in #3572
- ui/packages/profile: Disable automatic retries for merge queries by @metalmatze in #3514
- pkg/query/flamegraph_arrow: Expose diff values, dont set to null by @metalmatze in #3624
- *: Allow normalizing server side by @brancz in #3625
- ci: fix snap test - s/port/http-address/g by @jnsgruk in #3622
- pkg/debuginfo: Save sources upload without extension by @brancz in #3631
- index.tsx: fix typo by @javierhonduco in #3637
- pkg/query/flamegraph_arrow: Add tracing by @metalmatze in #3635
- pkg/query/flamegraph_arrow: Properly calculate height by @metalmatze in #3632
- pkg/query: Improve flamegraph performance through dictionary unification by @brancz in #3651
- ui: Reverting prettier-plugin-tailwindcss upgrade by @manojVivek in #3658
- add startline to function when symbolizing elf by @albertlockett in #3648
- Improve flamegraph rendering performance by @brancz in #3661
- ui: Sources Panel UI improvements by @manojVivek in #3657
- Add source report: View sources and show profiling data inline by @brancz in #3666
- Move table to using arrow by @metalmatze in #3659
- ui: Disabling sources view by default by @manojVivek in #3668
- ui: Read source UI improvements by @manojVivek in #3670
- Use checked allocator by @thorfour in #3673
- pkg/query: Fix how inlined functions are determined to be root by @brancz in #3684
- ui/packages/profile/Table: Check functionname for empty string by @metalmatze in #3687
- Implementing redesign by @monicawoj in #3548
- pkg/query: Small arrow flamegraph cleanups by @brancz in #3685
- ui: Fix to show the loader on top of the source pane by @manojVivek in #3686
- pkg/query: Reduce copy children cpu by @brancz in #3695
- ui: Fix unexpectedly unfocusing matchers input by @brancz in #3701
- fix profile view header bug and button spacing by @monicawoj in #3705
- go.mod: Update frostdb and arrow by @brancz in #3706
- pkg/query: Ignore staticcheck lint by @brancz in #3707
- ui: Minor UI fixes by @manojVivek in #3714
- ui: Source View - Scroll to line fix by @manojVivek in #3716
- ui: Parca minor style tweaks for Input and Select component by @manojVivek in #3717
- pkg/query: Reduce dependency on sample labels by @brancz in #3718
- pkg/query: Use hash of labels instead of marshaling labels to json by @brancz in #3719
- General styling and dark mode improvements by @monicawoj in #3720
- Fix double free by @thorfour in #3726
- ui: Reading string from Arrow ArrayBuffers by @manojVivek in #3727
- pkg/parca: Add --http-read-timeout and --http-write-timeout options by @quite4work in #3689
- Fix Clear Selection button in table by @monicawoj in #3728
- fix memory leak by @thorfour in #3733
- pkg/query/flamegraph_arrow: Trim using breadth-first-search #3722 by @thorfour in #3730
- ui: Minor UI fixes by @manojVivek in #3735
- ui: Flamegraph - passing width from the parent instead of detecting from within by @manojVivek in #3736
- ui/shared/profile: Pass down arrow response object by @metalmatze in #3738
- pkg/query: Use maps instead of slices for children for O(1) access by @brancz in #3743
- fix(ui): remove unused tableFromIPC import by @maxbrunet in #3746
- ci: yarn cache config tweaks by @manojVivek in #3739
- pkg/query/flamegraph_arrow: Return empty record if no samples by @metalmatze in #3740
- pkg/query/flamegraph_arrow: Remove locationFolded column by @metalmatze in #3752
- Disable Parca scraping by default by @metalmatze in #3737
- pkg/query: Fix test by @brancz in #3753
- *: Remove unnecessary arrow structs by @brancz in #3754
- ui: Arrow string fix by @manojVivek in #3761
- pkg/query: Select children map before iterating over stack by @brancz in #3763
- pkg/query/flamegraph_arrow: Add testing flamegraphComparer by @metalmatze in #3755
- ui: Make arrow flamegraph the default by @metalmatze in #3764
- pkg/query: Don't use GetValueIndex, use raw underlying array by @brancz in #3765
- pkg/query: Use optimal index uint type for dictionaries by @metalmatze in #3772
- pkg/query: Create bytes percent column to recordStats by @metalmatze in #3773
- Various small arrow flamegraph perf improvements by @brancz in #3771
- pkg/query/flamegraph_arrow: Remove mapping start,limit,offset by @metalmatze in #3774
- Choose optimal integer types based to minimize size by @brancz in #3775
- fix(cache): ensure LoadingOnceCache can only load once by @maxbrunet in #3768
- pkg/server: Remove cmdline endpoint by @brancz in #3423
- pkg/metastore: Guard against function being nil by @metalmatze in #3778
- pkg/query: Remove unused mapping columns from arrow table by @metalmatze in #3779
- ui/profile/icicle: Always group by function name by @metalmatze in #3781
- ui: Docked Graph MetaInfo Panel by @manojVivek in #3683
- Icicle graph legend by @monicawoj in #3787
- Modify wording of error messages by @yomete in #3806
- pkg/query: Set different metadata on aggregated row to null by @metalmatze in #3805
- ui/profile/CompareButton: Use variant neutral by @metalmatze in #3785
- use latest tip of arrow by @thorfour in #3811
- Fix sharing profile bug by @yomete in #3818
- pkg/query: Build pprof directly from arrow records by @brancz in #3826
- proto: Add latest report types to sharing by @brancz in #3831
- ui: Source View fixes by @manojVivek in #3836
- Add gRPC endpoint for Agent telemetry data by @javierhonduco in #3837
- updating table header position:https://github.com/parca-dev/parca/iss… by @karthick3018 in #3838
- pkg/query: Fix potential nil pointer by @brancz in #3844
- pkg/parcacol: Don't allocate during string to byte conversion by @brancz in #3845
- pkg/query: Use mapping file validity bitmap to add mapping file by @brancz in #3846
- pkg/query: Transfer empty values from empty dictionaries correctly by @brancz in #3849
- pkg/query: Improve filter performance by @brancz in #3850
New Contributors
- @albertlockett made their first contribution in #3648
- @quite4work made their first contribution in #3689
- @karthick3018 made their first contribution in #3838
Full Changelog: v0.18.0...v0.19.0