@@ -11,16 +11,15 @@ use std::io::Read as _;
11
11
use re_build_info:: CrateVersion ;
12
12
use re_log_types:: LogMsg ;
13
13
14
+ use crate :: codec;
14
15
use crate :: codec:: file:: decoder;
15
16
use crate :: FileHeader ;
16
- use crate :: LegacyMessageHeader ;
17
17
use crate :: OLD_RRD_HEADERS ;
18
- use crate :: { codec, legacy:: LegacyLogMsg } ;
19
- use crate :: { Compression , EncodingOptions , Serializer } ;
18
+ use crate :: { EncodingOptions , Serializer } ;
20
19
21
20
// ----------------------------------------------------------------------------
22
21
23
- fn warn_on_version_mismatch ( encoded_version : [ u8 ; 4 ] ) {
22
+ fn warn_on_version_mismatch ( encoded_version : [ u8 ; 4 ] ) -> Result < ( ) , DecodeError > {
24
23
// We used 0000 for all .rrd files up until 2023-02-27, post 0.2.0 release:
25
24
let encoded_version = if encoded_version == [ 0 , 0 , 0 , 0 ] {
26
25
CrateVersion :: new ( 0 , 2 , 0 )
@@ -30,11 +29,16 @@ fn warn_on_version_mismatch(encoded_version: [u8; 4]) {
30
29
31
30
if encoded_version. major == 0 && encoded_version. minor < 23 {
32
31
// We broke compatibility for 0.23 for (hopefully) the last time.
33
- re_log:: warn_once!( "Attempting to load .rrd file from {encoded_version}…" ) ;
32
+ Err ( DecodeError :: IncompatibleRerunVersion {
33
+ file : encoded_version,
34
+ local : CrateVersion :: LOCAL ,
35
+ } )
34
36
} else if encoded_version <= CrateVersion :: LOCAL {
35
37
// Loading old files should be fine, and if it is not, the chunk migration in re_sorbet should already log a warning.
38
+ Ok ( ( ) )
36
39
} else {
37
40
re_log:: warn_once!( "Found data stream with Rerun version {encoded_version} which is newer than the local Rerun version ({}). This file may contain data that is not compatible with this version of Rerun. Consider updating Rerun." , CrateVersion :: LOCAL ) ;
41
+ Ok ( ( ) )
38
42
}
39
43
}
40
44
@@ -78,9 +82,6 @@ pub enum DecodeError {
78
82
#[ error( "Arrow error: {0}" ) ]
79
83
Arrow ( #[ from] arrow:: error:: ArrowError ) ,
80
84
81
- #[ error( "MsgPack error: {0}" ) ]
82
- MsgPack ( #[ from] rmp_serde:: decode:: Error ) ,
83
-
84
85
#[ error( "Codec error: {0}" ) ]
85
86
Codec ( #[ from] codec:: CodecError ) ,
86
87
}
@@ -139,10 +140,10 @@ pub fn options_from_bytes(bytes: &[u8]) -> Result<(CrateVersion, EncodingOptions
139
140
return Err ( DecodeError :: NotAnRrd ) ;
140
141
}
141
142
142
- warn_on_version_mismatch ( version) ;
143
+ warn_on_version_mismatch ( version) ? ;
143
144
144
145
match options. serializer {
145
- Serializer :: LegacyMsgPack | Serializer :: Protobuf => { }
146
+ Serializer :: Protobuf => { }
146
147
}
147
148
148
149
Ok ( ( CrateVersion :: from_bytes ( version) , options) )
@@ -167,8 +168,6 @@ pub struct Decoder<R: std::io::Read> {
167
168
version : CrateVersion ,
168
169
options : EncodingOptions ,
169
170
read : Reader < R > ,
170
- uncompressed : Vec < u8 > , // scratch space
171
- compressed : Vec < u8 > , // scratch space
172
171
173
172
/// The size in bytes of the data that has been decoded up to now.
174
173
size_bytes : u64 ,
@@ -197,8 +196,6 @@ impl<R: std::io::Read> Decoder<R> {
197
196
version,
198
197
options,
199
198
read : Reader :: Raw ( read) ,
200
- uncompressed : vec ! [ ] ,
201
- compressed : vec ! [ ] ,
202
199
size_bytes : FileHeader :: SIZE as _ ,
203
200
} )
204
201
}
@@ -208,8 +205,6 @@ impl<R: std::io::Read> Decoder<R> {
208
205
version,
209
206
options,
210
207
read : Reader :: Raw ( read) ,
211
- uncompressed : vec ! [ ] ,
212
- compressed : vec ! [ ] ,
213
208
size_bytes : FileHeader :: SIZE as _ ,
214
209
}
215
210
}
@@ -242,8 +237,6 @@ impl<R: std::io::Read> Decoder<R> {
242
237
version,
243
238
options,
244
239
read : Reader :: Buffered ( read) ,
245
- uncompressed : vec ! [ ] ,
246
- compressed : vec ! [ ] ,
247
240
size_bytes : FileHeader :: SIZE as _ ,
248
241
} )
249
242
}
@@ -323,78 +316,6 @@ impl<R: std::io::Read> Iterator for Decoder<R> {
323
316
_ => return Some ( Err ( err) ) ,
324
317
} ,
325
318
} ,
326
- Serializer :: LegacyMsgPack => {
327
- let header = match LegacyMessageHeader :: decode ( & mut self . read ) {
328
- Ok ( header) => header,
329
- Err ( err) => match err {
330
- DecodeError :: Read ( e) if e. kind ( ) == std:: io:: ErrorKind :: UnexpectedEof => {
331
- return None ;
332
- }
333
- other => return Some ( Err ( other) ) ,
334
- } ,
335
- } ;
336
- self . size_bytes += LegacyMessageHeader :: SIZE as u64 ;
337
-
338
- match header {
339
- LegacyMessageHeader :: Data {
340
- compressed_len,
341
- uncompressed_len,
342
- } => {
343
- let uncompressed_len = uncompressed_len as usize ;
344
- let compressed_len = compressed_len as usize ;
345
-
346
- self . uncompressed
347
- . resize ( self . uncompressed . len ( ) . max ( uncompressed_len) , 0 ) ;
348
-
349
- match self . options . compression {
350
- Compression :: Off => {
351
- re_tracing:: profile_scope!( "read uncompressed" ) ;
352
- if let Err ( err) = self
353
- . read
354
- . read_exact ( & mut self . uncompressed [ ..uncompressed_len] )
355
- {
356
- return Some ( Err ( DecodeError :: Read ( err) ) ) ;
357
- }
358
- self . size_bytes += uncompressed_len as u64 ;
359
- }
360
-
361
- Compression :: LZ4 => {
362
- self . compressed
363
- . resize ( self . compressed . len ( ) . max ( compressed_len) , 0 ) ;
364
-
365
- {
366
- re_tracing:: profile_scope!( "read compressed" ) ;
367
- if let Err ( err) =
368
- self . read . read_exact ( & mut self . compressed [ ..compressed_len] )
369
- {
370
- return Some ( Err ( DecodeError :: Read ( err) ) ) ;
371
- }
372
- }
373
-
374
- re_tracing:: profile_scope!( "lz4" ) ;
375
- if let Err ( err) = lz4_flex:: block:: decompress_into (
376
- & self . compressed [ ..compressed_len] ,
377
- & mut self . uncompressed [ ..uncompressed_len] ,
378
- ) {
379
- return Some ( Err ( DecodeError :: Lz4 ( err) ) ) ;
380
- }
381
-
382
- self . size_bytes += compressed_len as u64 ;
383
- }
384
- }
385
-
386
- let data = & self . uncompressed [ ..uncompressed_len] ;
387
- {
388
- re_tracing:: profile_scope!( "MsgPack deser" ) ;
389
- match rmp_serde:: from_slice :: < LegacyLogMsg > ( data) {
390
- Ok ( legacy_msg) => Some ( legacy_msg. migrate ( ) ) ,
391
- Err ( err) => return Some ( Err ( err. into ( ) ) ) ,
392
- }
393
- }
394
- }
395
- LegacyMessageHeader :: EndOfStream => None ,
396
- }
397
- }
398
319
} ;
399
320
400
321
let Some ( mut msg) = msg else {
@@ -426,6 +347,8 @@ impl<R: std::io::Read> Iterator for Decoder<R> {
426
347
mod tests {
427
348
#![ allow( clippy:: unwrap_used) ] // acceptable for tests
428
349
350
+ use crate :: Compression ;
351
+
429
352
use super :: * ;
430
353
use re_build_info:: CrateVersion ;
431
354
use re_chunk:: RowId ;
0 commit comments