Skip to content

Commit 4f63242

Browse files
authored
Partition-to-segment rename (wave 2): re_uri (#12050)
1 parent 1e44c8e commit 4f63242

File tree

25 files changed

+235
-196
lines changed

25 files changed

+235
-196
lines changed

crates/store/re_data_source/src/data_source.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ pub enum LogDataSource {
3535
Stdin,
3636

3737
/// A `rerun://` URI pointing to a recording.
38-
RedapDatasetPartition {
39-
uri: re_uri::DatasetPartitionUri,
38+
RedapDatasetSegment {
39+
uri: re_uri::DatasetSegmentUri,
4040

4141
/// Switch to this recording once it has been loaded?
4242
select_when_loaded: bool,
@@ -117,8 +117,8 @@ impl LogDataSource {
117117
}
118118
}
119119

120-
if let Ok(uri) = url.parse::<re_uri::DatasetPartitionUri>() {
121-
Some(Self::RedapDatasetPartition {
120+
if let Ok(uri) = url.parse::<re_uri::DatasetSegmentUri>() {
121+
Some(Self::RedapDatasetSegment {
122122
uri,
123123
select_when_loaded: true,
124124
})
@@ -233,7 +233,7 @@ impl LogDataSource {
233233
Ok(rx)
234234
}
235235

236-
Self::RedapDatasetPartition {
236+
Self::RedapDatasetSegment {
237237
uri,
238238
select_when_loaded,
239239
} => {
@@ -250,7 +250,7 @@ impl LogDataSource {
250250

251251
let connection_registry = connection_registry.clone();
252252
let uri_clone = uri.clone();
253-
let stream_partition = async move {
253+
let stream_segment = async move {
254254
let client = connection_registry
255255
.client(uri_clone.origin.clone())
256256
.await
@@ -262,7 +262,7 @@ impl LogDataSource {
262262
};
263263

264264
spawn_future(async move {
265-
if let Err(err) = stream_partition.await {
265+
if let Err(err) = stream_segment.await {
266266
re_log::warn!("Error while streaming: {}", re_error::format_ref(&err));
267267
}
268268
});
@@ -322,9 +322,12 @@ mod tests {
322322
"www.foo.zip/blueprint.rbl",
323323
];
324324
let grpc = [
325+
// segment_id (new)
326+
"rerun://127.0.0.1:1234/dataset/1830B33B45B963E7774455beb91701ae/data?segment_id=sid",
327+
"rerun://127.0.0.1:1234/dataset/1830B33B45B963E7774455beb91701ae/data?segment_id=sid&[email protected]",
328+
"rerun+http://example.com/dataset/1830B33B45B963E7774455beb91701ae/data?segment_id=sid",
329+
// partition_id (legacy, for backward compatibility)
325330
"rerun://127.0.0.1:1234/dataset/1830B33B45B963E7774455beb91701ae/data?partition_id=pid",
326-
"rerun://127.0.0.1:1234/dataset/1830B33B45B963E7774455beb91701ae/data?partition_id=pid&[email protected]",
327-
"rerun+http://example.com/dataset/1830B33B45B963E7774455beb91701ae/data?partition_id=pid",
328331
];
329332

330333
let proxy = [
@@ -360,12 +363,9 @@ mod tests {
360363

361364
for uri in grpc {
362365
let data_source = LogDataSource::from_uri(file_source.clone(), uri);
363-
if !matches!(
364-
data_source,
365-
Some(LogDataSource::RedapDatasetPartition { .. })
366-
) {
366+
if !matches!(data_source, Some(LogDataSource::RedapDatasetSegment { .. })) {
367367
eprintln!(
368-
"Expected {uri:?} to be categorized as readp dataset. Instead it got parsed as {data_source:?}"
368+
"Expected {uri:?} to be categorized as redap dataset segment. Instead it got parsed as {data_source:?}"
369369
);
370370
failed = true;
371371
}

crates/store/re_entity_db/src/entity_db.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ pub enum EntityDbClass<'a> {
4545
/// This is an official rerun example recording.
4646
ExampleRecording,
4747

48-
/// This is a recording loaded from a remote dataset partition.
49-
DatasetPartition(&'a re_uri::DatasetPartitionUri),
48+
/// This is a recording loaded from a remote dataset segment.
49+
DatasetSegment(&'a re_uri::DatasetSegmentUri),
5050

5151
/// This is a blueprint.
5252
Blueprint,
@@ -293,7 +293,7 @@ impl EntityDb {
293293
}
294294

295295
Some(SmartChannelSource::RedapGrpcStream { uri, .. }) => {
296-
EntityDbClass::DatasetPartition(uri)
296+
EntityDbClass::DatasetSegment(uri)
297297
}
298298

299299
_ => EntityDbClass::LocalRecording,

crates/store/re_redap_client/src/grpc.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ where
297297
pub async fn stream_blueprint_and_segment_from_server(
298298
mut client: ConnectionClient,
299299
tx: re_smart_channel::Sender<DataSourceMessage>,
300-
uri: re_uri::DatasetPartitionUri,
300+
uri: re_uri::DatasetSegmentUri,
301301
on_msg: Option<Box<dyn Fn() + Send + Sync>>,
302302
) -> Result<(), ApiError> {
303303
re_log::debug!("Loading {uri}…");
@@ -355,10 +355,10 @@ pub async fn stream_blueprint_and_segment_from_server(
355355
re_log::debug!("No blueprint dataset found for {uri}");
356356
}
357357

358-
let re_uri::DatasetPartitionUri {
358+
let re_uri::DatasetSegmentUri {
359359
origin: _,
360360
dataset_id,
361-
partition_id: segment_id,
361+
segment_id,
362362
time_range,
363363
fragment,
364364
} = uri;

crates/store/re_smart_channel/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ pub enum SmartChannelSource {
6363

6464
/// The data is streaming in directly from a Rerun Data Platform server, over gRPC.
6565
RedapGrpcStream {
66-
uri: re_uri::DatasetPartitionUri,
66+
uri: re_uri::DatasetSegmentUri,
6767

6868
/// Switch to this recording once it has been loaded?
6969
select_when_loaded: bool,
@@ -146,7 +146,7 @@ impl SmartChannelSource {
146146
// We only show things we know are very-soon-to-be recordings:
147147
Self::File(path) => Some(path.to_string_lossy().into_owned()),
148148
Self::RrdHttpStream { url, .. } => Some(url.clone()),
149-
Self::RedapGrpcStream { uri, .. } => Some(uri.partition_id.clone()),
149+
Self::RedapGrpcStream { uri, .. } => Some(uri.segment_id.clone()),
150150

151151
Self::RrdWebEventListener
152152
| Self::JsChannel { .. }
@@ -240,7 +240,7 @@ pub enum SmartMessageSource {
240240

241241
/// A file on a Rerun Data Platform server, over `rerun://` gRPC interface.
242242
RedapGrpcStream {
243-
uri: re_uri::DatasetPartitionUri,
243+
uri: re_uri::DatasetSegmentUri,
244244

245245
/// Switch to this recording once it has been loaded?
246246
select_when_loaded: bool,

crates/store/re_uri/src/endpoints/dataset.rs

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,30 @@ use crate::{Error, Fragment, Origin, RedapUri, TimeSelection};
55
/// URI pointing at the data underlying a dataset.
66
///
77
/// Currently, the following format is supported:
8-
/// `<origin>/dataset/$DATASET_ID/data?partition_id=$PARTITION_ID&time_range=$TIME_RANGE`
8+
/// `<origin>/dataset/$DATASET_ID/data?segment_id=$SEGMENT_ID&time_range=$TIME_RANGE`
99
///
10-
/// `partition_id` is currently mandatory, and `time_range` is optional.
10+
/// `segment_id` is currently mandatory, and `time_range` is optional.
1111
/// In the future we will add richer queries.
1212
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
13-
pub struct DatasetPartitionUri {
13+
pub struct DatasetSegmentUri {
1414
pub origin: Origin,
1515
pub dataset_id: re_tuid::Tuid,
1616

1717
// Query parameters: these affect what data is returned.
1818
/// Currently mandatory.
19-
pub partition_id: String,
19+
pub segment_id: String,
2020
pub time_range: Option<TimeSelection>,
2121

2222
// Fragment parameters: these affect what the viewer focuses on:
2323
pub fragment: Fragment,
2424
}
2525

26-
impl std::fmt::Display for DatasetPartitionUri {
26+
impl std::fmt::Display for DatasetSegmentUri {
2727
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
2828
let Self {
2929
origin,
3030
dataset_id,
31-
partition_id,
31+
segment_id,
3232
time_range,
3333
fragment,
3434
} = self;
@@ -37,7 +37,7 @@ impl std::fmt::Display for DatasetPartitionUri {
3737

3838
// ?query:
3939
{
40-
write!(f, "?partition_id={partition_id}")?;
40+
write!(f, "?segment_id={segment_id}")?;
4141
}
4242
if let Some(time_range) = time_range {
4343
write!(f, "&time_range={time_range}")?;
@@ -53,15 +53,21 @@ impl std::fmt::Display for DatasetPartitionUri {
5353
}
5454
}
5555

56-
impl DatasetPartitionUri {
56+
impl DatasetSegmentUri {
5757
pub fn new(origin: Origin, dataset_id: re_tuid::Tuid, url: &url::Url) -> Result<Self, Error> {
58-
let mut partition_id = None;
58+
let mut segment_id = None;
59+
let mut legacy_partition_id = None;
5960
let mut time_range = None;
6061

6162
for (key, value) in url.query_pairs() {
6263
match key.as_ref() {
64+
// Accept legacy `partition_id` query parameter.
6365
"partition_id" => {
64-
partition_id = Some(value.to_string());
66+
legacy_partition_id = Some(value.to_string());
67+
}
68+
69+
"segment_id" => {
70+
segment_id = Some(value.to_string());
6571
}
6672
"time_range" => {
6773
// `+` means whitespace in URLs.
@@ -75,8 +81,16 @@ impl DatasetPartitionUri {
7581
}
7682
}
7783

78-
let Some(partition_id) = partition_id else {
79-
return Err(Error::MissingPartitionId);
84+
let segment_id = match (segment_id, legacy_partition_id) {
85+
(Some(s), None) | (None, Some(s)) => s,
86+
87+
(None, None) => {
88+
return Err(Error::MissingSegmentId);
89+
}
90+
91+
(Some(_), Some(_)) => {
92+
return Err(Error::AmbiguousSegmentId);
93+
}
8094
};
8195

8296
let mut fragment = Fragment::default();
@@ -87,7 +101,7 @@ impl DatasetPartitionUri {
87101
Ok(Self {
88102
origin,
89103
dataset_id,
90-
partition_id,
104+
segment_id,
91105
time_range,
92106
fragment,
93107
})
@@ -96,9 +110,9 @@ impl DatasetPartitionUri {
96110
/// Returns [`Self`] without any (optional) `?query` or `#fragment`.
97111
pub fn without_query_and_fragment(mut self) -> Self {
98112
let Self {
99-
origin: _, // Mandatory
100-
dataset_id: _, // Mandatory
101-
partition_id: _, // Mandatory
113+
origin: _, // Mandatory
114+
dataset_id: _, // Mandatory
115+
segment_id: _, // Mandatory
102116
time_range,
103117
fragment,
104118
} = &mut self;
@@ -112,9 +126,9 @@ impl DatasetPartitionUri {
112126
/// Returns [`Self`] without any (optional) `#fragment`.
113127
pub fn without_fragment(mut self) -> Self {
114128
let Self {
115-
origin: _, // Mandatory
116-
dataset_id: _, // Mandatory
117-
partition_id: _, // Mandatory
129+
origin: _, // Mandatory
130+
dataset_id: _, // Mandatory
131+
segment_id: _, // Mandatory
118132
time_range: _,
119133
fragment,
120134
} = &mut self;
@@ -128,12 +142,12 @@ impl DatasetPartitionUri {
128142
StoreId::new(
129143
re_log_types::StoreKind::Recording,
130144
self.dataset_id.to_string(),
131-
self.partition_id.clone(),
145+
self.segment_id.clone(),
132146
)
133147
}
134148
}
135149

136-
impl std::str::FromStr for DatasetPartitionUri {
150+
impl std::str::FromStr for DatasetSegmentUri {
137151
type Err = Error;
138152

139153
fn from_str(s: &str) -> Result<Self, Self::Err> {
@@ -148,7 +162,7 @@ impl std::str::FromStr for DatasetPartitionUri {
148162
// --------------------------------
149163

150164
// Serialize as string:
151-
impl serde::Serialize for DatasetPartitionUri {
165+
impl serde::Serialize for DatasetSegmentUri {
152166
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
153167
where
154168
S: serde::Serializer,
@@ -157,7 +171,7 @@ impl serde::Serialize for DatasetPartitionUri {
157171
}
158172
}
159173

160-
impl<'de> serde::Deserialize<'de> for DatasetPartitionUri {
174+
impl<'de> serde::Deserialize<'de> for DatasetSegmentUri {
161175
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
162176
where
163177
D: serde::Deserializer<'de>,

crates/store/re_uri/src/error.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,13 @@ pub enum Error {
2525
#[error("URL {url:?} cannot be loaded as a recording")]
2626
CannotLoadUrlAsRecording { url: String },
2727

28-
#[error("Dataset data URL required a `?partition_id` query parameter")]
29-
MissingPartitionId,
28+
#[error("Dataset data URL requires a `?segment_id` query parameter")]
29+
MissingSegmentId,
30+
31+
#[error(
32+
"Dataset data URL cannot contain both `?segment_id` and legacy `?partition_id` query parameters"
33+
)]
34+
AmbiguousSegmentId,
3035

3136
#[error("Invalid TUID: {0}")]
3237
InvalidTuid(<re_tuid::Tuid as FromStr>::Err),

crates/store/re_uri/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
//! "rerun+http://localhost:51234/proxy",
2727
//!
2828
//! // Links to recording on the dataplatform (optionally with timestamp).
29-
//! "rerun://127.0.0.1:1234/dataset/1830B33B45B963E7774455beb91701ae/data?partition_id=pid&[email protected]",
29+
//! "rerun://127.0.0.1:1234/dataset/1830B33B45B963E7774455beb91701ae/data?segment_id=sid&[email protected]",
3030
//! ] {
3131
//! assert!(uri.parse::<re_uri::RedapUri>().is_ok());
3232
//! }
@@ -43,7 +43,7 @@ mod time_selection;
4343

4444
pub use self::{
4545
endpoints::{
46-
catalog::CatalogUri, dataset::DatasetPartitionUri, entry::EntryUri, proxy::ProxyUri,
46+
catalog::CatalogUri, dataset::DatasetSegmentUri, entry::EntryUri, proxy::ProxyUri,
4747
},
4848
error::Error,
4949
fragment::Fragment,

0 commit comments

Comments
 (0)