Proto commits in rerun-io/rerun

These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)

Commit:6fbbc8f
Author:Isse
Committer:GitHub

Add asset datasets, which can be used to store shared data between segments in a dataset. ### Related - Closes RR-4761 ### What Adds a asset dataset, which similar to blueprint datasets are auto********ally created for datasets and have their lifetime tied to the owning dataset. This PR does not do any of the planned filtering with properties, or any client handling of asset layers. ### Testing There are two new `re_redap_tests` which tests registering & getting assets and another that makes sure asset dataset is removed when the dataset is removed. Also adds python e2e_redap_tests. ### Compatibility This deletes an experimental field from a message, which was documented as possibly being removed at any time. --------- Source-Ref: b858c1b4949775dea73f46994619cd1accf8b317 Co-authored-by: Antoine Beyeler <49431240+abey79@users.noreply.github.com>

The documentation is generated from this commit.

Commit:aa56c88
Author:Lucas Meurer
Committer:GitHub

Add `rerun viewer-mcp` ### Related * part of https://linear.app/rerun/project/rerun-mcp-ee806820f51a * needs https://github.com/rerun-io/reality/pull/2286 ### What Adds `rerun mcp`, a mcp server that lets agents interact with a running viewer. ### Testing Tested headfully and headlessly on macos. --------- Source-Ref: 9c0200acf6e7b29cdad2fded01674308bcb2b3b7 Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Jochen Görtler <me@jgoertler.com>

Commit:3cacbbb
Author:Michal Matczuk
Committer:GitHub

Split redap_manifest_registry read and write paths to separate services patchset 5 Merge writer and querier proto into single file. Rename proto definitions, structs, fields, functions to have - `ManifestWriter*`, `manifest_writer_*`, `mw(_*)`, - `ManifestQuerier`, `manifest_querier_*`, `mq(_*)` naming scheme. Note that the configuration options and deployments are **not** affected and shall be refactored later when doing the deployment split. Source-Ref: 9d385a9c631acfa057d31c723a9ba9dffe8bcf14

Commit:8e07bdb
Author:Jochen Görtler
Committer:GitHub

Implement `WatchEvents` in `re_server` ### Related * Closes RR-4836 * Follow up: RR-4853 * Follow up: RR-4854 * Follow up: RR-4874 ### What This introduces a new `WatchEvent` gRPC call to the Catalog API, which can be used to notify connected viewers about catalog lifecycle changes. This PR is only a first step and introduces entry-based events, so no registering of events (RR-4853). It also does not aim to improve the UI around connection problems (RR-4854). ### Compatibility For now the Hub returns `Unimplemented`, which the viewer handles gracefully. ### Testing * Adds a basic OSS-only test to `re_redap_test`, which tests both new events. Source-Ref: b500ae48ec3afb00c2bc4e2ddcbdd0a40334b890

Commit:0c60d04
Author:Andreas Reich
Committer:GitHub

Table blueprint registration for segment tables Source-Ref: c65cb14da4ef1f59e2b689bd5cffa5d78f6081c3 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>

Commit:47d29ff
Author:Tim Saucer
Committer:GitHub

chore: update lance, datafusion, and arrow ### Related This is a dependency update. ### What - Update Arrow to v58 - Update Lance to v7 - Update DataFusion to v53 ### Testing Existing unit tests ### Compatibility This does require dataframe users to update to `datafusion-python 53.0.0` or later. --------- Source-Ref: 73cd591f48ba8ae9f3fc08456a4e1b4343c6bb60 Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>

Commit:4dd9c78
Author:Andrea Reale
Committer:GitHub

feature-removal: drop custom indices Why: - We don't offer them to our customers - They materialize customer data into our manifest registry which - Does not scale - Is a concern for our security / privacy model Where: Remove all traces from * Redap (protocol) * OSS Server * SDK * Hub * Related tests --------- Signed-off-by: Andrea Reale <andrea@rerun.io> Source-Ref: 12746f267765ded03b12504f20893cdee20ca7ab Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Andrea Reale <andrea-reale@users.noreply.github.com>

Commit:f2a2805
Author:Andreas Reich
Committer:GitHub

Table blueprint registration instead of base64 encoded table blueprints ### Related * Fixes RR-4512 ### What This replaces the base64 inline table blueprint with catalog-backed table blueprint registration, near identical to how we do it with datasets. We had the inline blueprint as purely experimental feature in 0.33 & 0.32, I don't think there's much value in keeping them alive. The Python API exposes experimental helpers to register, list, and select table blueprints for a table. Blueprint registration for both datasets & tables comes with some simple validation now server sided. Table blueprint themselves are tested using existing tests, new registration etc. is tested via the usual e2e server testing. Source-Ref: c72395c90af1df7208383a204119704c52c0d687

Commit:f6d8ae6
Author:Emil Ernerfeldt
Committer:GitHub

Add experimental support for Asset Layers ### Related * Closes RR-4755 ### What This implements an experimental Python API and re_server implementation of Asset Layers Source-Ref: 6167bfb094f644db2e30b9ab4ab0740a4274050e

Commit:97accbd
Author:Emil Ernerfeldt
Committer:GitHub

Add experimental `LayerClass` to gRPC protocol ### Related * Part of RR-4755 ### What * Adds experimental gRPC protocol * Refactors `re_server` slightly * Returns "not implemented" on re_server and hub ### Nomenclature <img width="887" height="579" alt="image" src="https://github.com/user-attachments/assets/e53b2af6-2852-41c8-9721-5f574fa8b51c" /> --------- Source-Ref: 8144932fb7cd5ec0c0dfebc351bd965467b81b1b Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

Commit:28372a1
Author:Emil Ernerfeldt
Committer:GitHub

Lint `.proto` files Bonus: also lint `.mjs` and `.ts` files Source-Ref: f163a9807d86926dd8de2e960bbc761beacb93c9

Commit:be13170
Author:Andrea Reale
Committer:GitHub

dataplatform api: use entry headers everywhere ### Related - RR-4726 - RR-4727 ### What `x-rerun-entry-id` is an existing dataplatform API header using to specify the target of an operation. Using an header instead of the body has a few advantages: - can be interecepted by grpc middlware for telemetry - we can potentially route/aut requests based on the header without necessarily decoding the body The header however was not used uniformly everywhere and many methods were still specifying the target of the request via the body. The main current drawback for that is that we would miss the standard grpc telemetry for `dataset_id`. Notably, I realized this when looking at deletemetry for `delete_entry`. ### What Add header-based target spec to all "eligible" `rerun.cloud` enpoints. Send the header from the clients. * Keep falling back to body to allow old clients to work with new servers * Keep sending id in the body to allow new clients to work with old servers ### Side quest * `with_entry_id` and family used to return a `Result` that would only fire if `EntryId.to_string()` produced non ASCII strings, which it doesn't. Because we use this method /everywhere/, I switch to an `expect` at the call site, which removes lots of boilerplate. ### Compatibility Full forward and backward. --------- Signed-off-by: Andrea Reale <andrea@rerun.io> Source-Ref: 8516ba8433373925bfe0e2f3e2663f3c1aace6e9

Commit:00b7eba
Author:Andrea Reale
Committer:GitHub

RR-4549: detect metadata-source drift via ETags ### Related * Closes RR-4549 ### Why Customer trace surfaced opaque "Internal" decode failures on `/FetchChunks` which are highly likely to be occurring because the source RRD object had been mutated since registration. However, there was no way for a user (or oncall) to tell drift from genuine corruption, and no actionable error message. This PR makes drift visible end-to-end, and threads diagnostic context through the decode path. ### How * At registration time, the object-store exposed `ETag` and `registration_time` are stored (very redundantly) in the `ChunkKey` column in the partition manifest * This is very redundant, but future/upcoming compression should help a lot. * On `QueryDataset` ChunkKeys are returned to the client (no changes compared to today). * On `/FetchChunks` requests the client sends `ChunkKeys` to the server (no changes) * Chunk scanner uses the new information to evaluate drift (this is new!). * On direct-from-s3, the client now decodes `ChunkKeys` to get etag/registration time info and detect drift **Proto / wire format** * In order to have the SDK decode `ChunkKey` content, this PR promotes `ChunkKey` and `RrdChunkLocation` to the public proto. * As a bonus, because of that, SDK starts to use the offsets in the `ChunkKey` rather than the previously redundantly sent offsets. * Unfortunately, we need to keep sending those back for backwards compatibility. * We'll have to clean them up in the near future when no client still expects them. ** If-Match ** * When we have a strong ETag, we add it as an `If-Then` header to the HTTP request so that the server gives us a precondition failed rather than returning data we know will fail. **ETag quirks** * When the server sends us a strong etag, we use `If-Match` header on the range request to avoid transferring data if we know there's drift * Otherwise, we fallback to post-hoc comparison and only do e-tag matching on decode errors. ### Compatibility **Wire-format** | | Old client | New client | |---|---|---| | **Old server** | as today | sees null `chunk_key.etag` / `registration_time_nanos`, skips `If-Match`, behaves as today | | **New server** | new server still emits the legacy flat columns (`chunk_byte_offset`, `chunk_byte_len`, `rerun_layer_direct_url`); old client ignores the new fields and behaves as today | full enforcement | Runtime deploy is order-independent. **Manifest data** - Legacy partition manifests (registered before this PR) have `ChunkKey.etag` and `ChunkKey.registration_time_nanos` unset. New consumers (server `FetchChunks` and direct-fetch client) treat the absence as "no enforcement" — the precondition path is skipped and behavior matches today. --------- Signed-off-by: Andrea Reale <andrea@rerun.io> Source-Ref: 76a2bd8151a71661abd068895abee0a542ca0951 Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Andrea Reale <andrea-reale@users.noreply.github.com>

Commit:a863585
Author:Tim Saucer
Committer:GitHub

Push down per-segment using index values to server ### Related * Closes RR-4355 * Closes https://github.com/rerun-io/reality/pull/1572 ### What Switch from pulling all chunks for a segment when we have `using_index_values` to allowing the user to specify the mapping from segment ID to index values. This pushes the logic down to the server about which chunks are relevant for the query, and should lead to significant performance enhancements when we have many different index values / segment ID combinations. ### Testing Additional tests included. ### Compatibility This is backwards compatible, so new clients will still work with older servers. --------- Source-Ref: c593a0ecd20a7c8df94377fb30e37d1ad32470ae Co-authored-by: Andrea Reale <andrea@rerun.io> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com> Co-authored-by: mailmindlin <mailmindlin@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

Commit:87c5e05
Author:Emil Ernerfeldt
Committer:GitHub

`CatalogClient`: Add RTT and bandwidth probes ## Summary - Adds server-streaming RPC `RerunCloudService.DoBandwidthTest(num_bytes) -> stream { payload: bytes }` for measuring round-trip time and bandwidth between a client and the cloud. - The server returns exactly `num_bytes` of pseudo-random, incompressible bytes (xorshift64*), split into ~1 MiB chunks. The payload generator lives in `re_protos::cloud::v1alpha1::ext::BandwidthTestPayloadIter` and is shared by `re_server` (local/test) and `redap_frontend` (production cloud). - Exposes a single high-level Python helper on `CatalogClient`: ```python client = rr.catalog.CatalogClient("…") print(client.benchmark()) # BenchmarkResult(rtt=12.0 ms, bandwidth=112.0 MiB/s) ``` `benchmark()` returns a frozen `BenchmarkResult` dataclass (`rtt: timedelta`, `bandwidth: float | None`); all formatting lives in `__repr__`. The grpc-matching low-level methods (`rtt_seconds`, `bandwidth_bytes_per_sec`) stay on `CatalogClientInternal` for callers who want raw numbers. ## How it works 1. RTT is the **minimum** elapsed time across `num_pings` (default 5) calls to `/DoBandwidthTest` with `num_bytes = 1`. Using the minimum (not the mean) rejects latency spikes from scheduling jitter or transient network congestion. 2. Bandwidth is `num_bytes / (elapsed - rtt)` after a single `/DoBandwidthTest` request. `bandwidth` is `None` (rendered as `"(too fast to measure)"`) when `elapsed ≤ rtt` — e.g. a small payload on a fast loopback connection where transfer time is dominated by RTT. ## Why incompressible bytes gRPC and proxies may transparently compress payloads. An xorshift64\* stream is high-entropy, so any general-purpose codec leaves it untouched — we measure raw transport bandwidth, not a compression ratio. ## Test plan - [x] `cargo clippy -D warnings` clean for `re_protos`, `re_server`, `redap_frontend`, `re_redap_client`, and `rerun_py`. - [x] Python wheel rebuild, `python_check_signatures.py` and `py-fmt-check` both pass. - [x] Run against a local `redap` (with `REDAP_ARTIFICIAL_LATENCY_MS=100`) from Python: ``` BenchmarkResult(rtt=103.0 ms, bandwidth=108.8 MiB/s) BenchmarkResult(rtt=102.1 ms, bandwidth=111.0 MiB/s) # num_bytes=1 MiB BenchmarkResult(rtt=102.7 ms, bandwidth=114.7 MiB/s) # num_bytes=64 MiB ``` RTT matches the configured artificial latency; bandwidth scales up with payload as fixed overhead amortizes. Follow-ups (not blockers for this PR): - Run against a deployed stack and sanity-check reported numbers. - Confirm the response is not transparently compressed by the proxy chain (verify `Content-Encoding` / payload size on the wire). Closes [RR-4526](https://linear.app/rerun/issue/RR-4526/bandwidth-measurement-endpoint-on-cloud). Source-Ref: ff41c42cf26a3886096cdd38c99b0d0a8a4ab26a

Commit:260d119
Author:Ilya Zlobintsev
Committer:GitHub

Make task cancellation API public, add `.cancel()` on RegistrationHandle ### Related Functionality originally added in https://github.com/rerun-io/reality/pull/962 ### What Previously, cancelling tasks was a "private" (actually publicly accessible, but staff-only) GRPC endpoint. Now, it becomes part of our official protocol, and is exposed in the Python SDK through the `RegistrationHande.cancel` method. ### Testing - [x] AWS ### Compatibility This moves the CancelTasks method from the private protocol to the public one. From now on, any changes to it will be considered breaking, but otherwise this is fine. Source-Ref: 02a83f7552e89db8208c39727dee053bc7d062a1

Commit:228827d
Author:Jochen Görtler
Committer:GitHub

Sync releases 0.31.0 and 0.31.1 (#12715) ### Related * Contains all changes from #12710. * Contains all changes from #12714. * Supersedes #12713. ### What Sync PR. Includes upgraded `nightly` version for doc publishing workflow. Source-Ref: f79063fc3bc37ef7600724f6476ed49b7ac832e3

Commit:99001e3
Author:Jochen Görtler
Committer:Jochen Görtler

fmt pb

Commit:957ae09
Author:Ilya Zlobintsev
Committer:GitHub

Add direct fetching from S3, use it in SDK ### Related Closes RR-4036 [Notion doc](https://www.notion.so/rerunio/Fetching-chunks-from-the-client-31fb24554b1980a7bfc3e21e94e1e9aa) ### What `QueryDatasetRequest` now has a new parameter where the client can ask to include direct (presigned) URLs to layer files in S3. The SDK makes use of this, with a fallback to the old GRPC path. The viewer is unaffected for now. ### Testing - [X] AWS - [x] Azure ### TODO - [x] Azure permissions - [x] Clean up debug env var, logs(?) ### Compatibility This is a backwards-compatible change server-side, but non-backwards-compatible on the SDK side. This means that an old SDK can talk to a new server, but a new SDK is not guaranteed to work with an old server that does not support the new parameter. This is allowed under our backwards compat rules. --------- Source-Ref: a6d629b9e6043fc69997aac53aa0e465478078fb Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com> Co-authored-by: mailmindlin <mailmindlin@users.noreply.github.com>

Commit:94dddd7
Author:Jochen Görtler

fmt pb

Commit:c8dd0c8
Author:Nick
Committer:GitHub

Add cloud provider details to end point ### Related Cost savings efforts and improving the management of our various stacks. ### What Adds a cloud provider endpoint so we can better automate registration for our stacks https://rerunio.slack.com/archives/C09FQBVHHC1/p1771957459917499 This moves us in a direction to simplify dataset_util and hopefully get around to removing it entirely. ### Testing * Added e2e test * Add OSS specific test * Didn't test again local/cloud redap ### Compatibility This adds new fields onto the protobuf so things should be compatible. There is slight risk for addition of any API surface that our client and cloud are aligned. If this lands in 0.31 then we will want to make sure to cherry-pick into 0.10 so that the cloud endpoint exists for the client to call. Source-Ref: 65ccb39b0baff6d536b0ff8898e52fa25c740236

Commit:18f3003
Author:Emil Ernerfeldt
Committer:GitHub

Add `WhoAmI` gRPC endpoint for verifying client auth This makes it much easier to track login attempts and their results. Source-Ref: 0e6e15c88debbe404536a81fa81800549e59e202

Commit:e9e3e14
Author:Andreas Reich
Committer:GitHub

Fix broken link and resolve trivial URL redirects ## Summary - Fix broken link to `movable-type.co.uk` (site is down) with an archive.org URL - Update `http://rerun.io` → `https://rerun.io` across the codebase - Update `http://scripts.sil.org/OFL` → `https://openfontlicense.org` - Resolve 14 rerun.io doc path redirects to their current destinations (e.g. `/docs/getting-started/troubleshooting` → `/docs/overview/installing-rerun/troubleshooting`) --------- Source-Ref: 800344f08cd30b4bcf0aa255cf77a42b6a02f5ab Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

Commit:c840a46
Author:Andreas Reich

proto fmt

Commit:9b865c7
Author:Clement Rey
Committer:GitHub

Actually support multi-layered `/GetRrdManifest` for realsies `/GetRrdManifest` was never updated since its very hacky meetup-induced inception. It never really supported layered segments, nor deletions, let alone mixtures of both. It does now.. I think. --- So I can see at least 3 distinct categories of bugs: * [x] Multi-layered /GetRrdManifest breaks in all kinds of ways * [x] Multi-layered deletion is gonna break in all kinds of ways * [x] Multi-layered schema hashing is just plain broken TODO: * [x] Check snapshots make sense * [x] Manually test the canary dataset * [x] Self-review Source-Ref: 082b48170ec6dbd8271560a55c5a3b3f4432a158

Commit:1eb6c79
Author:Antoine Beyeler
Committer:GitHub

The `url` argument of `CatalogClient.create_table()` is now a prefix Source-Ref: 959bb839992731b012aaef479def07e8fafccbca

Commit:153acd1
Author:Clement Rey
Committer:GitHub

Atomic (un)registrations Implements: * Atomic registration via status CAS loop * Unregistration (also atomic) in OSS, DPF & Python SDK --- * Closes https://linear.app/rerun/issue/RR-3507/atomic-rrd-registrations * Closes https://linear.app/rerun/issue/RR-3483/deleteunregister-segments --- TODO: * [x] address remaining TODOs * [x] `--force` * [x] make sure all snapshots make sense * [x] self-review * [x] embark @andrea-reale on an emotional review journey * [x] also ask him if he can think of any `deleted_filter` I might have missed * [x] also ask him why the errors i get on the client always miss the valuable source info * [x] does the DM have a scalar index on status? should it? * [x] at least make an issue Source-Ref: e37dc1646b4bcad4572b98b2e551202f42c79c03

Commit:a5c50c8
Author:Clement Rey
Committer:Jeremy Leibs

Add compression support to `DataframePart` `DataframePart` is what we use to transport and/or store any Arrow data that doesn't belong to a Chunk. This includes but isn't limited to: RRD manifests, segment tables, task reports, etc. This generally reduce data size by around 10x, which can make a lot of difference when it comes to using the dataplatform over a standard connection. For BW compatibility reason, we cannot enable this by default yet. But getting this in right now will make it possible to enable this broadly starting with 0.30. Source-Ref: 7a2210017976097b7b42e1ae06f2a616017fa63d

Commit:2050dca
Author:Clement Rey
Committer:GitHub

Add compression support to `DataframePart` `DataframePart` is what we use to transport and/or store any Arrow data that doesn't belong to a Chunk. This includes but isn't limited to: RRD manifests, segment tables, task reports, etc. This generally reduce data size by around 10x, which can make a lot of difference when it comes to using the dataplatform over a standard connection. For BW compatibility reason, we cannot enable this by default yet. But getting this in right now will make it possible to enable this broadly starting with 0.30. Source-Ref: 7a2210017976097b7b42e1ae06f2a616017fa63d

Commit:7904233
Author:Tobias Hintze
Committer:lucasmerlin

Add version field to gRPC VersionResponse Add a `version` field to `VersionResponse` that exposes a single version string for the whole stack. The value comes from the `$EXPOSED_VERSION` environment variable, defaulting to "undefined" if not set or empty. Source-Ref: 8357e6b8fa90588411988d76161c85eaa5314a11 (cherry picked from commit e4fcf684b997337d6ec3b4ee43999371a403f854)

Commit:e4fcf68
Author:Tobias Hintze
Committer:GitHub

Add version field to gRPC VersionResponse Add a `version` field to `VersionResponse` that exposes a single version string for the whole stack. The value comes from the `$EXPOSED_VERSION` environment variable, defaulting to "undefined" if not set or empty. Source-Ref: 8357e6b8fa90588411988d76161c85eaa5314a11

Commit:d2f91b6
Author:rerun-sync[bot]
Committer:GitHub

Experimental python API for taking viewer screenshots Co-authored-by: Andreas Reich <r_andreas2@web.de> Source-Ref: 0bb67f5af9231fc6e1f599d4c9f49e72906914bd

Commit:dcd501d
Author:Andreas Reich
Committer:Andreas Reich

plumb through message to viewer. or at least into the vincinity

Commit:2de969e
Author:Clement Rey
Committer:GitHub

`/GetRrdManifest` on Rerun Cloud (#12323) This implements all the necessary OSS changes so that `/GetRrdManifest` on Rerun Cloud can become a reality. The sibling PR takes care of the actual endpoint implementation in Rerun Cloud. Specifically: * Make `/GetRrdManifest` a proper end-to-end stream. * Tweak the test suite so that it doesn't track any implementation-specific concerns. The protobuf breaking changes are on purpose. --- * Part of https://linear.app/rerun/issue/RR-3110/implement-get-rrd-manifest-on-rerun-cloud * Sibling: https://github.com/rerun-io/dataplatform/pull/2206 * DNM: should be merged at the same time as the sibling

Commit:d90d488
Author:Clement Rey
Committer:Clement Rey

implement end-to-end streaming for /GetRrdManifest

Commit:030ea41
Author:Antoine Beyeler
Committer:GitHub

Add test coverage for `QueryDatasetRequest.query` (#12266)

Commit:c54f26e
Author:Sylvain Wallez
Committer:GitHub

Allow tables to be created without providing a URL (#12132) Fixes [RR-3012](https://linear.app/rerun/issue/RR-3012/default-write-location-for-create-table) The `url` parameter in `create_table_entry` is now optional. When it's `None`, the OSS server will create the Lance table in a temporary directory that will be deleted when the process exists. The path used is `$TMPDIR/rerun-data-<xxx>/lance-<some-tuid>`, e.g. `$TMPDIR/rerun-data-jYteWy/lance-187E63126233FA3A3f7ce35ea997f9c8` --------- Co-authored-by: Antoine Beyeler <49431240+abey79@users.noreply.github.com>

Commit:4b844cf
Author:Clement Rey
Committer:GitHub

`/GetRrdManifest` now returns actual `RrdManifest`s (#12222) Title. In addition: * `chunk_byte_size` & `chunk_byte_offset` are always mandatory * they are filled with uncompressed values in contexts where compressed values cannot be computed (e.g. the OSS server, where there is no disk involved and thus no compression) > ## Understand size/offset columns > > * `chunk_byte_size` & `chunk_byte_offset` are always reported using the backend's native > storage size. For a backend that makes use of compression, such as an RRD file with > compression enabled, these sizes are therefore compressed. For a backend that doesn't do any > kind of compression, such as the OSS server that stores everything already decoded in memory, > these sizes will correspond to heap memory usage. > * `chunk_byte_size_uncompressed` always corresponds to the size on the heap that the data would > require once fully decoded, regardless of the backend. > * `chunk_key`, if specified, should always be used to fetch the associated data. * `chunk_key` is optional gRPC breaking changes on purpose: unpublished API. --- * Fixes https://linear.app/rerun/issue/RR-3182/getrrdmanifest-needs-to-return-an-actual-rrdmanifest

Commit:c51c98d
Author:Antoine Beyeler
Committer:GitHub

Partition-to-segment rename (wave 4): rename everything else (#12085)

Commit:5a6d6db
Author:Clement Rey
Committer:GitHub

Fetch RRD manifests from OSS server (#12076) ## Related * Part of RR-3110 * Sibling PR: https://github.com/rerun-io/dataplatform/pull/2101 ## What The attached test summarizes everything you need to know. `server.get_rrd_manifest("my_segment_id")` yields something like the following: <img width="1303" height="749" alt="image" src="https://github.com/user-attachments/assets/7433ffee-19c6-4e0b-a409-38bb184502dc" /> Note the absence of `chunk_byte_size`/`chunk_byte_offset`, replaced by `chunk_key` instead. ## TODO * [x] ignore unimplemented errors in the redap_test --------- Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>

Commit:0f8b061
Author:Clement Rey
Committer:GitHub

RRD footers 2: RRD manifests (#12047) LLM summary: > This PR introduces RRD manifest support as the second part of the RRD footers series. The manifest provides an index of chunks in an RRD recording, enabling efficient query planning without loading actual data. Key changes include: > - Extending `RrdFooter` and adding `RrdManifest` protobuf definitions > - Implementing `RrdManifest` and `RrdManifestBuilder` to catalog chunks with their metadata (ID, size, offset, timeline ranges) > - Adding transport layer conversions between application-level and protobuf types > - Refactoring schema hash computation to a shared utility method To which I'll add: This PR introduces the core datastructure that this whole footer business is all about: the `RrdManifest`. The `RrdManifest` is a protobuf message (which, as always, comes with both a transport-level and application-level implementations) which carries various important metadata about the associated recording. The most important piece of metadata is the actual manifest record-batch, which lists all the chunks in the recording at at fine-grained enough level of detail that relevancy queries become possible without ever having to load the data in a local chunk-store first. Effectively, you can view record-batch is a dataframe representation of the time panel. There is a lot of code, but it's all fairly trivial and mechanical, bordering on boilerplate in some cases. In fact, what you should really focus on is the fact that this code: https://github.com/rerun-io/rerun/blob/ad754fab94517e80866f7911164a7622b932de74/crates/store/re_log_encoding/tests/footers_and_manifests.rs#L116-L173 yields this manifest record-batch: <img width="1137" height="1468" alt="image" src="https://github.com/user-attachments/assets/c7548fb8-4ea0-47fd-98c6-3783c2095e85" /> with this schema: https://github.com/rerun-io/rerun/blob/ad754fab94517e80866f7911164a7622b932de74/crates/store/re_log_encoding/tests/snapshots/footers_and_manifests__simple_manifest_batch_schema.snap#L5-L117 --- Part of RRD footers series of PRs: * https://github.com/rerun-io/rerun/pull/12044 * https://github.com/rerun-io/rerun/pull/12047 * https://github.com/rerun-io/rerun/pull/12048 * https://github.com/rerun-io/dataplatform/pull/2060 --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

Commit:e5cebf6
Author:Clement Rey
Committer:GitHub

RRD footers 1: framing (#12044) LLM summary: > This PR introduces the foundational framing infrastructure for RRD stream footers, which will enable richer metadata and improved stream navigation. It establishes the protocol-level types and state machine changes needed to support footers without yet populating them with content. > > Key changes include: > - Addition of `RrdFooter` message types at both transport (protobuf) and application levels > - Introduction of `StreamFooter` frame for locating and validating RRD footers > - Enhanced decoder state machine to handle the new footer frames > - Updated encoder to emit footers with basic state tracking infrastructure To which I would add the following: This introduces all the framing infrastructure so that RRD streams are now capable of carrying footers in all circumstances (including pipes). Specifically, this introduces a couple new types: * `RrdFooter`, a(n empty) protobuf message that will from now on act as the payload for messages of type `MessageKind::End`. * `MessageKind::End` isn't new, it's something that was always there, but until now was always empty. * As always, this has both a cheap transport-level definition and a less cheap app-level definition. * `StreamFooter`, a simple binary frame that mirrors `StreamHeader`, and whose main job is to keep track of where the `RrdFooter`. * This is used for O(1) access to the `RrdFooter`, e.g. when registering data on a Redap-compliant server. For now, these footers are always an empty protobuf messages. We will be filling them up in the following PRs. --- Part of RRD footers series of PRs: * https://github.com/rerun-io/rerun/pull/12044 * https://github.com/rerun-io/rerun/pull/12047 * https://github.com/rerun-io/rerun/pull/12048 * https://github.com/rerun-io/dataplatform/pull/2060 ## TODO * [x] `@rerun-bot full-check` --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

Commit:0d38bcb
Author:Clement Rey

protobuf definitions for RRD manifest

Commit:80ff0a6
Author:Clement Rey
Committer:Clement Rey

RRD footers: everything framing

Commit:39522a6
Author:Antoine Beyeler
Committer:GitHub

Partition-to-segment rename (wave 1): redap layer (#12017)

Commit:22d46fa
Author:Andrea Reale
Committer:GitHub

DPF: create_index: deprecate num_partitions (#11920)

Commit:0c88e94
Author:Tim Saucer
Committer:GitHub

Add ability to replace/upsert in tables (#11812) ### Related Closes https://linear.app/rerun/project/add-ability-to-upsert-data-in-tables-aad5989947ac ### What This PR follows up on the work from https://github.com/rerun-io/rerun/pull/11694 and the issues linked inside it. With this PR you can update existing tables if they have an index specified as a primary key. You do this by setting the metadata `rerun:is_table_index` on the field when creating the table. During `update` operations we will use these columns as the keys by which we update the underlying lance table.

Commit:cc8413b
Author:Clement Rey
Committer:GitHub

Index management APIs: Python bindings, types cleanup, and index statistics (#11729) Title. * Related: https://linear.app/rerun/issue/RR-2824/the-index-management-apis-need-actual-design (which is breadcrumbed throughout the code) --- Demo: ```py from __future__ import annotations import sys import json import rerun as rr def create_vector_index(dataset, num_partitions, num_sub_vectors) -> rr.IndexingResult: """Create a vector index for the embeddings columns.""" embedding_column = rr.dataframe.ComponentColumnSelector("/camera/wrist/embedding", "embeddings") return dataset.create_vector_index( column=embedding_column, time_index=rr.dataframe.IndexColumnSelector("real_time"), num_partitions=num_partitions, num_sub_vectors=num_sub_vectors, distance_metric="Cosine", ) addr = "rerun+http://localhost:51234" client = rr.catalog.CatalogClient(addr) dataset = client.get_dataset(name=sys.argv[1]) print() print("cleaning up all existing indexes...") for index in dataset.list_indexes(): deleted = dataset.delete_indexes(index.column) print(f"index deleted: {deleted} {json.dumps(json.loads(index.statistics), indent=4)}") print() for [num_partitions, num_sub_vectors] in [[8, 8], [2, 2]]: print("====") created = create_vector_index(dataset, num_partitions, num_sub_vectors) print(f"index created: {created.properties} {created.debug_info()} {json.dumps(json.loads(created.statistics), indent=4)}") deleted = dataset.delete_indexes(created.column) print(f"index deleted: {deleted}") ``` ``` RUST_LOG=off pixi run -e examples python create_vector_index.py droid:sample50 8 8 DEV ENVIRONMENT DETECTED! Re-importing rerun from: /home/cmc/dev/rerun-io/rerun/rerun_py/rerun_sdk cleaning up all existing indexes... index deleted: [IndexConfig('/camera/wrist/embedding:embeddings' on 'real_time': VectorIvfPq { num_partitions: 5, num_sub_vectors: 16, metric: cosine })] { "index_type": "IVF_PQ", "name": "instance_idx", "num_indices": 1, "updated_at_timestamp_ms": 1761906652272, "num_indexed_fragments": 1, "num_indexed_rows": 13537, "num_unindexed_fragments": 0, "num_unindexed_rows": 0, "num_indexed_rows_per_delta": [ 13537 ] } ==== index created: '/camera/wrist/embedding:embeddings' on 'real_time': VectorIvfPq { num_partitions: 8, num_sub_vectors: 8, metric: cosine } None { "index_type": "IVF_PQ", "name": "instance_idx", "num_indices": 1, "updated_at_timestamp_ms": 1761906752176, "num_indexed_fragments": 1, "num_indexed_rows": 13537, "num_unindexed_fragments": 0, "num_unindexed_rows": 0, "num_indexed_rows_per_delta": [ 13537 ] } index deleted: [IndexConfig('/camera/wrist/embedding:embeddings' on 'real_time': VectorIvfPq { num_partitions: 8, num_sub_vectors: 8, metric: cosine })] ==== index created: '/camera/wrist/embedding:embeddings' on 'real_time': VectorIvfPq { num_partitions: 2, num_sub_vectors: 2, metric: cosine } None { "index_type": "IVF_PQ", "name": "instance_idx", "num_indices": 1, "updated_at_timestamp_ms": 1761906752762, "num_indexed_fragments": 1, "num_indexed_rows": 13537, "num_unindexed_fragments": 0, "num_unindexed_rows": 0, "num_indexed_rows_per_delta": [ 13537 ] } index deleted: [IndexConfig('/camera/wrist/embedding:embeddings' on 'real_time': VectorIvfPq { num_partitions: 2, num_sub_vectors: 2, metric: cosine })] ``` --- * Sibling: https://github.com/rerun-io/dataplatform/pull/1947 * DNM: requires #11693

Commit:385b4c0
Author:Clement Rey
Committer:GitHub

Index management APIs (#11693) What the title says: * Introduce the new `ListIndexes` and `DeleteIndexes` * Introduce a cross-impl test suite that follows the entire lifecycle of an index: * `CreateIndex` * `ListIndexes` * `SearchDataset` * `DeleteIndexes` --- * Part of: https://linear.app/rerun/issue/RR-2734/include-sdk-api-to-delete-an-index * Sibling: https://github.com/rerun-io/dataplatform/pull/1926

Commit:4b2a81c
Author:Clement Rey

all of it

Commit:6b31743
Author:ntjohnson1

Find replace partition with segment

Commit:23db52f
Author:Clement Rey

Merge remote-tracking branch 'origin/main' into cmc/delete_index

Commit:703c1fd
Author:Tim Saucer
Committer:GitHub

Create lance tables in the cloud (#11640) ### Related This is a follow on to https://github.com/rerun-io/rerun/pull/11565 It addresses a portion of https://linear.app/rerun/project/write-tables-to-rerun-cloud-via-the-python-sdk-432c0243348f/overview ### What With this PR we introduce a new server API to create a table from a given Schema. The current work will create a Lance based table. This table is registered with the server and available for immediate writing using #11565 Additionally this PR adds the integration testing in `re_redap_tests`

Commit:c8a70bf
Author:Clement Rey

introducing new cloud APIs for index mgmt

Commit:cb3ee25
Author:Jeremy Leibs
Committer:GitHub

Add a new `target_partition_num_rows` API parameter to the CreateIndex API (#11686) ### What The old way of specifying `num_partitions` is now deprecated. See: https://docs.rs/lance-index/0.38.2/lance_index/vector/ivf/builder/struct.IvfBuildParams.html#structfield.num_partitions Lance exposes a new `target_partition_size` parameter which gives me predictable performance instead of users manually needing to increase the number of partitions as the size of the dataset increases. This works better for things like incremental indexing. Resolves: RR-2772 --------- Co-authored-by: Clement Rey <cr.rey.clement@gmail.com>

Commit:dc7d4c5
Author:Jeremy Leibs
Committer:GitHub

Return optional DebugInfo with `memory_used` as part of CreateIndexResponse (#11691) ### Related - RR-2797 ### What This plumbs through an optional DebugInfo from the server. We expose this as part of a new IndexingResult returned from `create_vector_index`. `debug_info()` itself is exposed to python simply as a dictionary so we can more easily add more data here without worrying about API changes.

Commit:e7081af
Author:Jeremy Leibs

Implicit optional message

Commit:73256ff
Author:Jeremy Leibs
Committer:Jeremy Leibs

[api] Include optional DebugInfo as part of the CreateIndex api response

Commit:4b7d05d
Author:Jeremy Leibs

Rename size -> num_rows

Commit:9fb3cf9
Author:Clement Rey
Committer:Clement Rey

wip

Commit:6a88a55
Author:Jeremy Leibs
Committer:Jeremy Leibs

TODO / docstrings

Commit:d173e9a
Author:Jeremy Leibs
Committer:Jeremy Leibs

[api] Add target_partition_size to CreateIndex grpc

Commit:0588987
Author:Tim Saucer
Committer:Tim Saucer

Switch create table entry to use provider_details to follow same pattern as other messages

Commit:a34e35e
Author:Tim Saucer
Committer:Tim Saucer

Add CreateTable to proto and server

Commit:226cc26
Author:Tim Saucer
Committer:Tim Saucer

Add CreateTable to proto and server Add test for create_table Impl helper method Switch create table entry to use provider_details to follow same pattern as other messages Switch from passing string to url in create_table function Add python function for calling create table and a unit test Add unit test to verify we have rerun metadata as expected Reorder arguments so we can make path optional in follow on work

Commit:22a7287
Author:Antoine Beyeler
Committer:GitHub

Improve column projection specification and implement it for OSS server (#11687) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

Commit:3357b3a
Author:Clement Rey

wip

Commit:6d15dc4
Author:Clement Rey
Committer:GitHub

Simplify `CreateIndexResponse` (#11654)

Commit:7847ead
Author:Clement Rey

CreateIndexResponse crumbles into nothingness

Commit:fddd928
Author:Tim Saucer
Committer:Tim Saucer

Switch create table entry to use provider_details to follow same pattern as other messages

Commit:2673926
Author:Tim Saucer
Committer:Tim Saucer

Add CreateTable to proto and server

Commit:4c84c84
Author:Tim Saucer
Committer:GitHub

add table writing to lance table providers (#11565) ### Related Addresses part of https://linear.app/rerun/project/write-tables-to-rerun-cloud-via-the-python-sdk-432c0243348f/overview ### What This PR is foundational to our ability to write to any kind of table on the data platform. Included in this PR is enabling `insert_into` for our gRPC based table providers. This also includes updates to the OSS server to support table writing. We cannot merge this PR until the following are completed: - [x] Add identical support to data platform - [x] Add python integration tests

Commit:ebbbe18
Author:Clement Rey
Committer:GitHub

Simplify `CreateIndexRequest` (#11636) The interesting stuff will happen in the sibling (and its children). * Part of https://linear.app/rerun/issue/RR-2741/simplify-reruncloudservicecreateindex * Sibling: https://github.com/rerun-io/dataplatform/pull/1898

Commit:1219d5a
Author:Tim Saucer
Committer:Tim Saucer

Add CreateTable to proto and server

Commit:210369d
Author:Tim Saucer
Committer:Tim Saucer

Limit scope of write mode to append and overwrite

Commit:4fef101
Author:Tim Saucer
Committer:Tim Saucer

Proto lint

Commit:4b25942
Author:Tim Saucer
Committer:Tim Saucer

More rebase issues

Commit:90cf4fd
Author:Tim Saucer
Committer:Tim Saucer

Update protos since we will get the entry ID from the header not the message

Commit:2a863ce
Author:Tim Saucer
Committer:Tim Saucer

Add proto definition for writing tables

Commit:c74ae09
Author:Clement Rey
Committer:Clement Rey

simplify CreateIndexRequest

Commit:cefdc5b
Author:Tim Saucer
Committer:Tim Saucer

Limit scope of write mode to append and overwrite

Commit:56b60dd
Author:Tim Saucer
Committer:Tim Saucer

Proto lint

Commit:326d682
Author:Tim Saucer

More rebase issues

Commit:51bc854
Author:Tim Saucer
Committer:Tim Saucer

Update protos since we will get the entry ID from the header not the message

Commit:ad81a0f
Author:Tim Saucer
Committer:Tim Saucer

Add proto definition for writing tables

Commit:21c007a
Author:Clement Rey
Committer:GitHub

`re_log_encoding` v2 (#11582) A complete rewrite of `re_log_encoding` that pays off the organically grown debt and sprinkles a couple years of hindsight on top. This also closes the "one encoder/decoder to rule them all" story. Apologies, I really wanted to split this into multiple PRs, but everything I've tried turned into a dependency nightmare. All the code in `re_log_encoding` is new, so you can just ignore the diff entirely for that folder and look directly at the code, really. The docs are shit, but there is so much hidden complexity and so much context required, I'm never going to get them right on first try anyway. Suggestions welcome. I've put as reviewers all the people that got a live walkthrough. For everyone else, here's an excerpt from the docs of the new `re_log_encoding` to get an idea of what's going on: > This crate covers two equally important but orthogonal matters: > * Converting between transport-level and application-level Rerun types. > * Encoding and decoding Rerun RRD streams. > > If you are working with one of the gRPC APIs (Redap or SDK comms), then you want to be looking > at the [`ToTransport`]/[`ToApplication`] traits. The [`rrd`] module is completely irrelevant in > that case. You can learn more about these traits below. > > If you are working with actual RRD streams (i.e. everything that does not go through gRPC: > files, standard I/O, HTTP, data loaders, etc), then have a look into the [`rrd`] module. > The [`ToTransport`]/[`ToApplication`] traits will also be useful to you. You can learn more > about these traits below. > > ## What are transport-level and application-level types? > > To put it in simple terms: transport-level types are the types that you find in `re_protos`, while > application-level types are those that you find in `re_log_types`. > > More generally, transport-level types are Rust objects that represent the decoded value of some > Rerun bytes, *and nothing more than that*. It's all they do: they map raw bytes to their native > Rust representation and vice-versa. They never apply any application-level logic beyond that. > > Transport-level types are used to unopinionatedly transport Rerun data across the many mediums > that Rerun support, while application-level types are used to build applications for end-users, > such as the Rerun viewer itself. > > Application-level types on the other hand are *very* opinionated, and often perform a lot of > transformations on the data, including but not limited to: > * Chunk/Sorbet migrations > * Application ID injection > * SDK version patching > * Backward-compatibility shenanigans > * Etc > > Application-level can _not_ be encoded/decoded, only transport-level types can. To encode an > application-level type, you must first convert it to transport-level type. > You can do so by using the [`ToApplication`] & [`ToTransport`] traits exposed by this crate. > > ## How do I make sense of all these different `LogMsg` types?! > > There are 3 different `LogMsg`-related types that you will very often encounter: `re_log_types::LogMsg`, > `re_protos::log_msg::v1alpha1::LogMsg` and `re_protos::log_msg::v1alpha1::log_msg::Msg`. > > Mixing them up is a common source of pain and confusion, so let's go over what each does: > * `re_log_types::LogMsg` is the application-level type that we use all across the viewer > codebase. It can be obtained by calling `to_application()` on one of the transport-level > `LogMsg` types which, among many other things, will perform Chunk/Sorbet-level migrations. > `re_log_types::LogMsg` isn't used in Redap, where everything is done at the transport-level, always. > * `re_protos::log_msg::v1alpha1::LogMsg` is the transport-level definition of `LogMsg`. It is an > artifact of how `oneof` works in Protobuf: all it does is carry a `re_protos::log_msg::v1alpha1::log_msg::Msg`. > For that reason, it is never directly used, except by the legacy SDK comms protocol. > * Finally, `re_protos::log_msg::v1alpha1::log_msg::Msg` is the real transport-level type that we > care about. It is used all over the place when encoding and decoding RRD streams. > > ## What are the different protocols supported by Rerun? > > Rerun currently supports 3 protocols: > * Redap (Rerun Data Protocol): our gRPC-based protocol used by our OSS and proprietary data platforms. > * SDK comms: our legacy gRPC-based protocol, currently used by everything relying on the old > `StoreHub` model (logging, message proxy, etc). > * RRD streams: the binary protocol that we use for all stream-based interfaces (files, stdio, > data-loaders, HTTP fetches, etc). > > *All these protocols use the exact same encoding*. There is only one encoding: the Rerun encoding. > It often happens that one protocol makes use of some types while others don't (e.g. the > top-level `LogMsg` object is never used in RRD streams, but is used in SDK comms), but for all > the types they do share, the encoding will be the exact same. * Sibling: https://github.com/rerun-io/dataplatform/pull/1873

Commit:e6cc008
Author:Andrea Reale
Committer:GitHub

implement registration by prefix: OSS server (#11564) ### Related - RR-1962 - dataplatform-side change: https://github.com/rerun-io/dataplatform/pull/1864 ### What This implements, in the OSS server, a variant of `register_with_dataset` that allows data sources to be `prefix`-based paths. ``` ### What next This won't be usable by the SDK as is (i.e., the SDK will not let you register by prefix until we add support for it) --------- Signed-off-by: Andrea Reale <andrea@rerun.io> Co-authored-by: Antoine Beyeler <antoine@rerun.io>

Commit:2e4ac45
Author:Clement Rey

docs docs docs

Commit:d5fb115
Author:Clement Rey

re_log_encoding v2

Commit:57a0c71
Author:Clement Rey
Committer:Clement Rey

wip

Commit:d271cf0
Author:Clement Rey
Committer:Clement Rey

wip

Commit:04da80e
Author:Clement Rey
Committer:Clement Rey

fix RerunChunk.payload not being marked explicitly optional before it's too late

Commit:f552cd8
Author:Clement Rey
Committer:Clement Rey

wip

Commit:34629dc
Author:Tim Saucer
Committer:Tim Saucer

Update protos since we will get the entry ID from the header not the message

Commit:ff3ad11
Author:Tim Saucer
Committer:Tim Saucer

Add proto definition for writing tables

Commit:b705975
Author:Clement Rey
Committer:Clement Rey

fix RerunChunk.payload not being marked explicitly optional before it's too late

Commit:f4a2305
Author:Clement Rey

fix RerunChunk.payload not being marked explicitly optional before it's too late

Commit:a526733
Author:Clement Rey
Committer:Gijs de Jong

Fix data corruption during compression of large chunks (#11525) There are 3 problems involved: 1. `ArrowMsg::uncompressed_size` is defined as an `int32`. That issue speaks for itself. 2. The encoding path tracks payload sizes using `usize`, and then silently cast them to `int32` when encoding the Protobuf data, leading to gibberish and crashes during decoding. 3. `lz4_flex` has similar casting bugs: it can encode 64bit values but cannot decode them. Once again the `as` keyword is involved. This PR fixes 1 and 2. All the changes are backward and forward compatible because: * In protobuf, `uint64` is a strict superset of `int32`: both are unsigned varints on the wire. * There exist no valid RRD files out there with negative values for `uncompressed_size`. We can already log much bigger chunks than before, but not too big, otherwise `lz4` itself will during decoding: ``` thread 'decompress' panicked at 'attempt to add with overflow' lz4_flex-0.11.5/src/block/decompress_safe.rs:39 stack backtrace: 6: core::panicking::panic_fmt at core/src/panicking.rs:75:14 7: core::panicking::panic_const::panic_const_add_overflow at core/src/panicking.rs:175:17 8: std::sys::backtrace::__rust_begin_short_backtrace 9: core::ops::function::FnOnce::call_once{{vtable.shim}} 10: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once at alloc/src/boxed.rs:1966:9 <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once at alloc/src/boxed.rs:1966:9 std::sys::pal::unix::thread::Thread::new::thread_start at std/src/sys/pal/unix/thread.rs:97:17 11: <unknown> 12: <unknown> ``` I'll have a follow-up PR for the `lz4_flex` issue. --- * Half of fixing https://github.com/rerun-io/rerun/issues/11516 * The other half requires patching `lz4_flex` (on it) --- Checks: * [x] `rerun` with `--nb_scans 2000` * [x] `rerun rrd stats` with `--nb_scans 2000` * [x] :no_entry: `rerun` with `--nb_scans 3000` -> bug in lz4 * [x] :no_entry: `rerun rrd stats` with `--nb_scans 3000` -> bug in lz4 * [x] All dataplatform test suites pass * [x] Can load old RRDs no problem

Commit:19b350c
Author:Clement Rey
Committer:GitHub

Fix data corruption during compression of large chunks (#11525) There are 3 problems involved: 1. `ArrowMsg::uncompressed_size` is defined as an `int32`. That issue speaks for itself. 2. The encoding path tracks payload sizes using `usize`, and then silently cast them to `int32` when encoding the Protobuf data, leading to gibberish and crashes during decoding. 3. `lz4_flex` has similar casting bugs: it can encode 64bit values but cannot decode them. Once again the `as` keyword is involved. This PR fixes 1 and 2. All the changes are backward and forward compatible because: * In protobuf, `uint64` is a strict superset of `int32`: both are unsigned varints on the wire. * There exist no valid RRD files out there with negative values for `uncompressed_size`. We can already log much bigger chunks than before, but not too big, otherwise `lz4` itself will during decoding: ``` thread 'decompress' panicked at 'attempt to add with overflow' lz4_flex-0.11.5/src/block/decompress_safe.rs:39 stack backtrace: 6: core::panicking::panic_fmt at core/src/panicking.rs:75:14 7: core::panicking::panic_const::panic_const_add_overflow at core/src/panicking.rs:175:17 8: std::sys::backtrace::__rust_begin_short_backtrace 9: core::ops::function::FnOnce::call_once{{vtable.shim}} 10: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once at alloc/src/boxed.rs:1966:9 <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once at alloc/src/boxed.rs:1966:9 std::sys::pal::unix::thread::Thread::new::thread_start at std/src/sys/pal/unix/thread.rs:97:17 11: <unknown> 12: <unknown> ``` I'll have a follow-up PR for the `lz4_flex` issue. --- * Half of fixing https://github.com/rerun-io/rerun/issues/11516 * The other half requires patching `lz4_flex` (on it) --- Checks: * [x] `rerun` with `--nb_scans 2000` * [x] `rerun rrd stats` with `--nb_scans 2000` * [x] :no_entry: `rerun` with `--nb_scans 3000` -> bug in lz4 * [x] :no_entry: `rerun rrd stats` with `--nb_scans 3000` -> bug in lz4 * [x] All dataplatform test suites pass * [x] Can load old RRDs no problem

Commit:62fcf36
Author:Andrea Reale
Committer:GitHub

remove internal tasks operations from cloud public API (#11447)