Get desktop application:
View/edit binary Protocol Buffers messages
The catalog server public API. ## Headers Most endpoints in the catalog server service require specific gRPC headers to be set. The so-called "standard dataset headers" correspond to at least one of the following headers: * x-rerun-entry-id: ID of the entry of interest, e.g. `1860390B087BC65F602d68eb646c385c`. * x-rerun-entry-name-bin: Name of the entry of interest, e.g. `droid:sample2k`. Headers with a -bin suffix must be base64-encoded (HTTP only supports ASCII values, UTF8 strings must binary encoded).
Cancel existing tasks
`CancelTasksRequest` is the request message for cancelling a number of tasks
Unique identifiers for the tasks
`CancelTasksResponse` is the response message for cancelling a number of tasks
(message has no fields)
Name of the dataset entry to create. The name should be a short human-readable string. It must be unique within all entries in the catalog. If an entry with the same name already exists, the request will fail. Entry names ending with `__manifest` are reserved.
If specified, create the entry using this specific ID. Use at your own risk.
Name of the dataset entry to create. The name should be a short human-readable string. It must be unique within all entries in the catalog. If an entry with the same name already exists, the request will fail. Entry names ending with `__manifest` are reserved.
Information about the table to register. If not provided, a Lance-backed table will be created using at an auto-generated URL based on the server's configuration. If provided, it must be an encoded message of the `LanceTable` type, which contains the intended storage URL. The caller is responsible for ensuring that the storage is writable and free to use.
Schema of the table to create
DeleteDatasetEntry This endpoint requires the standard dataset headers.
Deprecated: use x-rerun-entry-id header instead. This field should be dropped once all servers are updated to 0.14.x or later.
(message has no fields)
Returns a payload of pseudo-random (incompressible) bytes of the requested size. Intended for measuring round-trip time and bandwidth between client and server: * Send a few small requests (e.g. `num_bytes = 1`) to estimate RTT. * Send a larger request (e.g. `num_bytes = 1 MiB`), subtract the RTT, and divide `num_bytes` by the remaining time to estimate bandwidth. The response is streamed as one or more chunks; the total number of bytes across all chunks is exactly `num_bytes`.
Total number of pseudo-random (incompressible) bytes the server should return, summed across all streamed response chunks.
A chunk of pseudo-random (incompressible) bytes. The total length across all streamed chunks equals `DoBandwidthTestRequest.num_bytes`.
Run global maintenance operations on the platform: this includes optimization of all datasets, garbage collection of unused data, and can include more in the future.
Request all maintenance operations to run on all datasets
(message has no fields)
(message has no fields)
Rerun Manifests maintenance operations: scalar index creation, compaction, etc. This endpoint requires the standard dataset headers.
Optimize all builtin indexes on this dataset. This merges all individual index deltas back in the main index, improving runtime performance of all indexes.
Retrain all builtin indexes on this dataset from scratch. This retrains all builtin indexes from scratch for optimal runtime performance. This is faster than re-creating the indexes, and automatically keeps track of their configurations. This implies `optimize_indexes`.
Compact the underlying Lance fragments, for all Rerun Manifests. Hardcoded to the default (optimal) settings.
If set, all Lance fragments older than this date will be removed, for all Rerun Manifests. In case requested date is more recent than 1 hour, it will be ignored and 1 hour ago timestamp will be used. This is to prevent still used files (like recent transaction files) to be removed and cause Lance Dataset update issues. See https://docs.rs/lance/latest/lance/dataset/cleanup/index.html and https://docs.rs/lance/latest/lance/dataset/cleanup/fn.cleanup_old_versions.html
List the replicated dataset in its object store, such as S3, and remove objects that are no longer present in the local dataset. This performs a full remote reconciliation, unlike normal cleanup, which only removes replica objects corresponding to local files deleted during that cleanup.
Override default platform behavior and allow cleanup of recent files. This will respect the value of `cleanup_before` timestamp even if it's more recent than 1 hour. ⚠️ Do not ever use this unless you know exactly what you're doing. Improper use will lead to data loss.
Fetch specific chunks from the catalog server. In a 2-step query process, result of 1st phase, that is, the result of `QueryDataset` should include all the necessary information to send the actual chunk requests, which is the 2nd step of the query process. See `FetchChunksRequest` for details on the fields that describe each individual chunk.
Information about the chunks to fetch. These dataframes have to include the following columns: * `chunk_id` - Chunk unique identifier * `segment_id` - segment this chunk belongs to. Currently needed as we pass this metadata back and forth * `segment_layer` - specific segment layer. Currently needed as we pass this metadata back and forth * `chunk_key` - chunk location details
Every gRPC response, even within the confines of a stream, involves HTTP2 overhead, which isn't cheap by any means, which is why we're returning a batch of `ArrowMsg` rather than a single one.
Get the assets that apply to this dataset. Returns the dataset's asset dataset and the asset segments within it. The asset segment ids may be spread over multiple responses, at the discretion of the server. This endpoint requires the standard dataset headers.
(message has no fields)
The asset dataset. Set on every response in the stream.
The segments of the asset dataset. Concatenate across all responses in the stream.
Returns the schema of the dataset manifest. To inspect the data of the dataset manifest, which is guaranteed to match the schema returned by this endpoint, check out `ScanDatasetManifest`. This endpoint requires the standard dataset headers.
(message has no fields)
Returns the schema of the dataset. This is the union of all the schemas from all the underlying segments. It will contain all the indexes, entities and components present in the dataset. This endpoint requires the standard dataset headers.
(message has no fields)
Get the RRD Footer manifest. This includes details about what chunks there are, and what kind of data they contain. The manifest might be returned in multiple parts, at the discretion of the server. When that happens, it is guaranteed that all parts have the same exact Sorbet schemas (and therefore identical Sorbet schema hashes too). That means it is always semantically valid to concatenate the data from these RRD manifests.
Returns the schema of the segment table. This is not to be confused with the schema of the dataset itself. For that, refer to `GetDatasetSchema`. To inspect the data of the segment table, which is guaranteed to match the schema returned by this endpoint, check out `ScanSegmentTable`. This endpoint requires the standard dataset headers.
(message has no fields)
Deprecated: use x-rerun-entry-id header instead. This field should be dropped once all servers are updated to 0.14.x or later.
Perform Rerun-native queries on a dataset, returning the matching chunk IDs, as well as information that can be sent back to the catalog server to fetch the actual chunks as part of `FetchChunks` request. In this 2-step query process, 1st step is getting information from the server about the chunks that contain relevant information. 2nd step is fetching those chunks (the actual data). These Rerun-native queries include: * Filtering by specific segment and chunk IDs. * Latest-at, range and dataframe queries. * Arbitrary Lance filters. To fetch the actual chunks themselves, see `FetchChunks`. Passing chunk IDs to this method effectively acts as a IF_EXIST filter. For latest-at queries, the returned chunks are a **correctness-preserving superset** of the minimum set needed to answer the query: the server may include additional candidate chunks (e.g., overlap siblings within the global max chunk length, or chunks that pass segment-level bounds without per-value narrowing). Clients are expected to run their own latest-at resolution on the returned chunks. This endpoint requires the standard dataset headers.
Client can specify what segments are queried. If left unspecified (empty list), all segments will be queried.
Will ask the server to generate direct URLs for the requested segments. It is not guaranteed that the server will return all (or any) of them.
Client can specify specific chunk ids to include. If left unspecified (empty list), all chunks that match other query parameters will be included.
Which entity paths are we interested in? Leave empty, and set `select_all_entity_paths`, in order to query all of them.
If set, the query will cover all existing entity paths. `entity_paths` must be empty, otherwise an error will be raised. Truth table: ```text select_all_entity_paths | entity_paths | result ------------------------+----------------+-------- false | [] | valid query, empty results (no entity paths selected) false | ['foo', 'bar'] | valid query, 'foo' & 'bar' selected true | [] | valid query, all entity paths selected true | ['foo', 'bar'] | invalid query, error ```
Which components are we interested in? If left unspecified, all existing components are considered of interest. This will perform a basic fuzzy match on the available columns' descriptors. The fuzzy logic is a simple case-sensitive `contains()` query. For example, given a `log_tick__SeriesLines:width` index, all of the following would match: `SeriesLines:width`, `Width`, `SeriesLines`, etc.
If set, static data will be excluded from the results.
If set, temporal data will be excluded from the results.
Generic parameters that will influence the behavior of the Lance scanner.
Query the status of submitted tasks
`QueryTasksRequest` is the request message for querying tasks status
Empty queries for all tasks if the server allows it.
`QueryTasksResponse` is the response message for querying tasks status encoded as a record batch
Query the status of submitted tasks as soon as they are no longer pending
`QueryTasksOnCompletionRequest` is the request message for querying tasks status. This is close-to-a-copy of `QueryTasksRequest`, with the addition of a timeout.
Empty queries for all tasks if the server allows it.
Time limit for the server to wait for task completion. The actual maximum time may be arbitrarily capped by the server.
`QueryTaskOnCompletionResponse` is the response message for querying tasks status encoded as a record batch. This is a copy of `QueryTasksResponse`.
Fetch metadata about a specific dataset. This endpoint requires the standard dataset headers.
(message has no fields)
ReadTableEntry This endpoint requires the standard dataset headers.
Deprecated: use x-rerun-entry-id header instead. This field should be dropped once all servers are updated to 0.14.x or later.
Register a foreign table as a new table entry in the catalog.
Name of the table entry to create. The name should be a short human-readable string. It must be unique within all entries in the catalog. If an entry with the same name already exists, the request will fail. Entry names ending with `__manifest` are reserved.
Information about the table to register. This must be encoded message of one of the following supported types: - LanceTable
Details about the table that was created and registered.
Register new segments with the Dataset. This endpoint requires the standard dataset headers.
Inspect the contents of the dataset manifest. The data will follow the schema returned by `GetDatasetManifestSchema`. This endpoint requires the standard dataset headers.
A list of column names to be projected server-side. If empty, all columns are returned. If not empty, the returned `RecordBatch` are guaranteed to only have the requested column, in the order they were requested. If a projected column does not exist, or is projected more than once, the `ScanDatasetManifest` call will fail with an `InvalidArgument` error.
An optional best-effort hint for pruning segment IDs from the server-side scan. Servers may apply or ignore this filter. Clients must re-apply filters locally if correctness depends on them.
The contents of the dataset manifest (i.e. information about layers) as Arrow RecordBatch.
Inspect the contents of the segment table. The data will follow the schema returned by `GetSegmentTableSchema`. This endpoint requires the standard dataset headers.
A list of column names to be projected server-side. If empty, all columns are returned. If not empty, the returned `RecordBatch` are guaranteed to only have the requested column, in the order they were requested. If a projected column does not exist, or is projected more than once, the `ScanSegmentTable` call will fail with an `InvalidArgument` error.
An optional best-effort hint for pruning segment IDs from the server-side scan. Servers may apply or ignore this filter. Clients must re-apply filters locally if correctness depends on them.
Segments metadata as Arrow RecordBatch.
Deprecated: use x-rerun-entry-id header instead. This field should be dropped once all servers are updated to 0.14.x or later.
TODO(jleibs): support ScanParameters iff we can plumb them into Datafusion TableProvider Otherwise, just wait for Arrow Flight rerun.common.v1alpha1.ScanParameters scan_parameters = 2;
Unregisters segments and layers from the Dataset. This is an asynchronous operation, and returns a list of task ids. The response is a stream only for historical reasons. This endpoint requires the standard dataset headers.
This request acts as a *product* filter: * empty `segments_to_drop` + empty `layers_to_drop`: invalid argument error * empty `segments_to_drop` + non-empty `layers_to_drop`: remove specified layers for *all* segments * non-empty `segments_to_drop` + empty `layers_to_drop`: remove *all* layers for specified segments * non-empty `segments_to_drop` + non-empty `layers_to_drop`: delete *all* specified layers for *all* specified segments
The segment IDs to drop. All of them if empty. The final filter will be the *outer product* of this and `layers_to_drop`.
The layer names to drop. All of them if empty. The final filter will be the *outer product* of this and `segments_to_drop`.
If true, deletion will go through regardless of the segments/layers' current statuses. This is only useful in the very specific, catatrophic scenario where the contents of the task queue were lost and some tasks are now stuck in `status=pending` forever. Do not use this unless you know exactly what you're doing.
This dataframe is always empty. It remains here for format compatibility with older SDKs. TODO(ilya): remove this once the clients are all new enough
Id of the task that performs the unregistration. The data is not deleted until the task completes.
UpdateDatasetEntry This endpoint requires the standard dataset headers.
The dataset to modify. Deprecated: use x-rerun-entry-id header instead. This field should be dropped once all servers are updated to 0.14.x or later.
The new values.
The updated dataset entry
UpdateEntry This endpoint requires the standard dataset headers.
The entry to modify. Deprecated: use x-rerun-entry-id header instead. This field should be dropped once all servers are updated to 0.14.x or later.
The new values for updatable fields.
The updated entry details
The table to modify.
The new values.
The updated table entry.
(message has no fields)
A single version string representing the version of the whole stack.
Cloud provider hosting this instance (e.g. "aws", "azure"). Null if not deployed on cloud.
Cloud region where this instance is deployed (e.g. "us-west-2", "eastus"). Null if not deployed on cloud.
Server-supported feature flags. Clients use this to gate optional behavior and stay safe against rolling deployments where the server may be older than the client. The format is a list of opaque feature strings. Known features: * `per_segment_index_values` — the server consumes `QueryLatestAt.per_segment_values` (RR-4355). Clients that omit this capability check and send `per_segment_values` to an old server will silently get static-only data. Unknown features must be ignored. Adding new features is additive and never breaks compatibility — old clients see an empty list and fall back to today's slow-but-correct path.
Which kinds of events to subscribe to. If empty, the server subscribes to all event kinds.
Returns information about the currently authenticated user. This is a lightweight endpoint that can be used to verify that authentication is successful and to retrieve the user's identity.
(message has no fields)
The user ID of the authenticated user, if any.
Whether the user has read access.
Whether the user has write access.
Write chunks to one or more segments. The segment ID for each individual chunk is extracted from their metadata (`rerun:segment_id`). This endpoint requires the standard dataset headers.
(message has no fields)
Write record batches to a table. This endpoint requires the standard dataset headers. TODO(#11645): endpoints with streaming input are not supported by `grpc-web`. A non-streaming shim will need to be added if/when the viewer uses this endpoint.
(message has no fields)
`ChunkKey` provides chunk location details in the data store. Returned by `QueryDataset` (in the `chunk_key` Arrow column) and forwarded back to the server on `FetchChunks`. The `location` payload is opaque and interpreted per `data_source_kind` (e.g. `RrdChunkLocation` for RRD).
Chunk unique identifier
What type of partition is this, rrd, mcap, etc. This information determines how to interpret the `location` payload.
The location of the chunk in the data store. Opaque bytes; readers decode based on `data_source_kind`.
ETag of the source object (segment) as observed at registration time. Optional: legacy registrations and stores that do not return an ETag leave this unset.
Wall-clock registration time of the parent segment (nanoseconds since the Unix epoch), as recorded in the dataset manifest. Diagnostic only: not used as a precondition. Lets a client correlate a decode failure on a stale chunk handle with a subsequent re-registration event without consulting the dataset manifest. Optional: legacy registrations leave this unset.
Used in:
Where is the data for this data source stored (e.g. s3://bucket/file or file:///path/to/file)?
Which segment layer should this data source be registered to? / Defaults to `base` if unspecified.
Is this a prefix URL (a directory)? If true, all files of `typ` under this prefix will be considered part of this data source.
What kind of data is it (e.g. rrd, mcap, Lance, etc)?
Used in: ,
Used in: ,
The blueprint dataset associated with this dataset (if any). This association is owned for lifecycle purposes: deleting this dataset also deletes the associated blueprint dataset.
The segment of the blueprint dataset corresponding to the default blueprint (if any).
The segment of the blueprint dataset corresponding to the default blueprint for this dataset's segment table (if any).
The asset dataset associated with this dataset (if any). This association is owned for lifecycle purposes: deleting this dataset also deletes the associated asset dataset.
Used in: , ,
Dataset-specific information, may be update with `UpdateDatasetEntry`
Read-only
Optional debug info
The amount of memory used by the task or service call in bytes
Used in:
Used in:
Minimal info about an Entry for high-level catalog summary
Used in: , , ,
The EntryId is immutable
The name of this entry.
The kind of entry
Updatable fields of an Entry
Used in:
The name of this entry.
Subscribe to all catalog entry lifecycle events.
Used in:
(message has no fields)
Used in:
Deprecated: use `entry_kinds` instead. Ignored by servers when `entry_kinds` is non-empty.
The entry kinds to include. If non-empty, the server returns exactly entries of these kinds (ENTRY_KIND_UNSPECIFIED is rejected with an `invalid_argument` error). It is recommended to always explicitly ask for a set of entry kinds. When unset the server returns a default set of kinds to ensure backwards compatibility with old clients that did not set this. This behavior may be dropped in future releases. (condition: after rerun-sdk 0.34 is out of its support cycle)
What type of entry. This has strong implication on which APIs are available for this entry.
Used in: ,
Always reserve unspecified as default value
Order as TYPE, TYPE_VIEW so things stay consistent as we introduce new types.
Application level error - used as `details` in the `google.rpc.Status` message
error code
unique identifier associated with the request (e.g. recording id, recording storage url)
human readable details about the error
Error codes for application level errors
Used in:
unused
object store access error
metadata database access error
Encoding / decoding error
Selects a category of events to subscribe to in `WatchEvents`.
Used in:
Catalog entry lifecycle events (created, deleted).
A list of index values for a single segment. Used in `QueryLatestAt.per_segment_values`.
Used in:
A foreign table stored as a Lance table.
The URL of the Lance table.
Used in:
If specified, will perform a latest-at query with the given parameters. You can combine this with a `QueryRange` in order to gather all the relevant chunks for a full-fledged dataframe query (i.e. they get OR'd together).
If specified, will perform a range query with the given parameters. You can combine this with a `QueryLatestAt` in order to gather all the relevant chunks for a full-fledged dataframe query (i.e. they get OR'd together).
If true, `columns` will contain the entire schema.
If true, `columns` always includes `byte_offset` and `byte_size`.
If true, `columns` always includes `entity_path`.
If true, `columns` always includes all static component-level indexes.
If true, `columns` always includes all temporal chunk-level indexes.
If true, `columns` always includes all component-level indexes.
A chunk-level latest-at query, aka `LatestAtRelevantChunks`. This has the exact same semantics as the query of the same name on our `ChunkStore`. Two modes of use (mutually exclusive): 1. Global: set `at`. Applied to all segments. 2. Per-segment: set `per_segment_values`. Each entry is positionally matched to `QueryDatasetRequest.segment_ids`. `at` and `Query.range` must be unset — the server reconstructs global bounds internally from the per-segment values.
Used in:
Which index column should we perform the query on? E.g. `log_time`. Leave this empty to query for static data.
Global query value — applied to all segments. Omit this field to query for static data only. Mutually exclusive with `per_segment_values`.
Per-segment index values, positionally matched to `QueryDatasetRequest.segment_ids`. When non-empty, `at` and `Query.range` must be unset — the server reconstructs global bounds from the values for Lance pre-filtering, then applies a per-segment post-filter for precision. Constraints (server returns `invalid_argument` on violation): - `segment_ids` must be non-empty. - `per_segment_values.len()` must equal `segment_ids.len()`. - `segment_ids` must contain no duplicates. Each entry's values list corresponds to the segment at the same position in `segment_ids`. An empty values list for a segment means no temporal chunks are returned for that segment (only static data).
A chunk-level range query, aka `RangeRelevantChunks`. This has the exact same semantics as the query of the same name on our `ChunkStore`.
Used in:
Which index column should we perform the query on? E.g. `log_time`.
What index range are we looking for?
RRD-specific decoding of `ChunkKey.location`.
Where the chunk is stored (e.g. s3://bucket/file, file:///path/to/file).
Byte offset of the chunk within the data source.
Chunk length in bytes.
Used in: ,
Scan only manifest rows belonging to these segment IDs. An empty list scans no segment rows.
Scan all manifest rows except those belonging to these segment IDs. An empty list skips no segment rows.
Used in:
Used in:
Always reserve unspecified as default value
Not used yet
All of the entries in the associated namespace
Used in: ,
Blueprint dataset associated with this table. This association is owned for lifecycle purposes: deleting this table also deletes the associated blueprint dataset. Like recording datasets, tables get an associated blueprint dataset automatically when they are created.
Segment of the blueprint dataset corresponding to the default table blueprint.
Used in: , , ,
Details specific to the table-provider
Table-specific information, may be updated with `UpdateTableEntry`.
Used in:
Always reserve unspecified as default value
Appends new rows to the existing table without modifying any existing rows.
Overwrites all existing rows in the table with the new rows.
Overwrite rows based on the rerun_table_index fields.
Update existing rows matched by rerun_table_index fields. Source rows that do not match any existing row are dropped. The source schema may be a subset of the table schema (only the key columns plus the columns to update). Maps to SQL `UPDATE`.