@@ -9,13 +9,12 @@ use std::{
9
9
10
10
use anyhow:: Context ;
11
11
use async_zip:: {
12
- write:: {
12
+ tokio :: write:: {
13
13
EntryStreamWriter ,
14
14
ZipFileWriter ,
15
15
} ,
16
16
Compression ,
17
17
ZipEntryBuilder ,
18
- ZipEntryBuilderExt ,
19
18
} ;
20
19
use bytes:: Bytes ;
21
20
use common:: {
@@ -723,7 +722,7 @@ impl<'a, 'b> ZipSnapshotTableUpload<'a, 'b> {
723
722
table_name : TableName ,
724
723
) -> anyhow:: Result < Self > {
725
724
let source_path = format ! ( "{table_name}/documents.jsonl" ) ;
726
- let builder = ZipEntryBuilder :: new ( source_path. clone ( ) , Compression :: Deflate )
725
+ let builder = ZipEntryBuilder :: new ( source_path. into ( ) , Compression :: Deflate )
727
726
. unix_permissions ( ZIP_ENTRY_PERMISSIONS ) ;
728
727
let entry_writer = zip_writer. write_entry_stream ( builder. build ( ) ) . await ?;
729
728
Ok ( Self { entry_writer } )
@@ -736,11 +735,8 @@ impl<'a, 'b> ZipSnapshotTableUpload<'a, 'b> {
736
735
737
736
async fn write_json_line ( & mut self , json : JsonValue ) -> anyhow:: Result < ( ) > {
738
737
let buf = serde_json:: to_vec ( & json) ?;
739
- self . entry_writer . compat_mut_write ( ) . write_all ( & buf) . await ?;
740
- self . entry_writer
741
- . compat_mut_write ( )
742
- . write_all ( & AFTER_DOCUMENTS_CLEAN )
743
- . await ?;
738
+ self . entry_writer . write_all ( & buf) . await ?;
739
+ self . entry_writer . write_all ( & AFTER_DOCUMENTS_CLEAN ) . await ?;
744
740
Ok ( ( ) )
745
741
}
746
742
@@ -756,7 +752,7 @@ struct ZipSnapshotUpload<'a> {
756
752
757
753
impl < ' a > ZipSnapshotUpload < ' a > {
758
754
async fn new ( out : & ' a mut ChannelWriter ) -> anyhow:: Result < Self > {
759
- let writer = ZipFileWriter :: new ( out) ;
755
+ let writer = ZipFileWriter :: with_tokio ( out) ;
760
756
let mut zip_snapshot_upload = Self { writer } ;
761
757
zip_snapshot_upload
762
758
. write_full_file ( format ! ( "README.md" ) , README_MD_CONTENTS )
@@ -765,13 +761,10 @@ impl<'a> ZipSnapshotUpload<'a> {
765
761
}
766
762
767
763
async fn write_full_file ( & mut self , path : String , contents : & str ) -> anyhow:: Result < ( ) > {
768
- let builder = ZipEntryBuilder :: new ( path, Compression :: Deflate )
764
+ let builder = ZipEntryBuilder :: new ( path. into ( ) , Compression :: Deflate )
769
765
. unix_permissions ( ZIP_ENTRY_PERMISSIONS ) ;
770
766
let mut entry_writer = self . writer . write_entry_stream ( builder. build ( ) ) . await ?;
771
- entry_writer
772
- . compat_mut_write ( )
773
- . write_all ( contents. as_bytes ( ) )
774
- . await ?;
767
+ entry_writer. write_all ( contents. as_bytes ( ) ) . await ?;
775
768
entry_writer. close ( ) . await ?;
776
769
Ok ( ( ) )
777
770
}
@@ -781,11 +774,11 @@ impl<'a> ZipSnapshotUpload<'a> {
781
774
path : String ,
782
775
mut contents : BoxStream < ' _ , std:: io:: Result < Bytes > > ,
783
776
) -> anyhow:: Result < ( ) > {
784
- let builder = ZipEntryBuilder :: new ( path, Compression :: Deflate )
777
+ let builder = ZipEntryBuilder :: new ( path. into ( ) , Compression :: Deflate )
785
778
. unix_permissions ( ZIP_ENTRY_PERMISSIONS ) ;
786
779
let mut entry_writer = self . writer . write_entry_stream ( builder. build ( ) ) . await ?;
787
780
while let Some ( chunk) = contents. try_next ( ) . await ? {
788
- entry_writer. compat_mut_write ( ) . write_all ( & chunk) . await ?;
781
+ entry_writer. write_all ( & chunk) . await ?;
789
782
}
790
783
entry_writer. close ( ) . await ?;
791
784
Ok ( ( ) )
@@ -817,23 +810,21 @@ impl<'a> ZipSnapshotUpload<'a> {
817
810
generated_schema : GeneratedSchema < T > ,
818
811
) -> anyhow:: Result < ( ) > {
819
812
let generated_schema_path = format ! ( "{table_name}/generated_schema.jsonl" ) ;
820
- let builder = ZipEntryBuilder :: new ( generated_schema_path. clone ( ) , Compression :: Deflate )
813
+ let builder = ZipEntryBuilder :: new ( generated_schema_path. into ( ) , Compression :: Deflate )
821
814
. unix_permissions ( ZIP_ENTRY_PERMISSIONS ) ;
822
815
let mut entry_writer = self . writer . write_entry_stream ( builder. build ( ) ) . await ?;
823
816
let generated_schema_str = generated_schema. inferred_shape . to_string ( ) ;
824
817
entry_writer
825
- . compat_mut_write ( )
826
818
. write_all ( serde_json:: to_string ( & generated_schema_str) ?. as_bytes ( ) )
827
819
. await ?;
828
- entry_writer. compat_mut_write ( ) . write_all ( b"\n " ) . await ?;
820
+ entry_writer. write_all ( b"\n " ) . await ?;
829
821
for ( override_id, override_export_context) in generated_schema. overrides . into_iter ( ) {
830
822
let override_json =
831
823
json ! ( { override_id. encode( ) : JsonValue :: from( override_export_context) } ) ;
832
824
entry_writer
833
- . compat_mut_write ( )
834
825
. write_all ( serde_json:: to_string ( & override_json) ?. as_bytes ( ) )
835
826
. await ?;
836
- entry_writer. compat_mut_write ( ) . write_all ( b"\n " ) . await ?;
827
+ entry_writer. write_all ( b"\n " ) . await ?;
837
828
}
838
829
entry_writer. close ( ) . await ?;
839
830
Ok ( ( ) )
@@ -857,6 +848,7 @@ mod tests {
857
848
use anyhow:: Context ;
858
849
use bytes:: Bytes ;
859
850
use common:: {
851
+ async_zip_ext:: ZipEntryReaderExt ,
860
852
document:: {
861
853
ParsedDocument ,
862
854
ResolvedDocument ,
@@ -1048,16 +1040,20 @@ mod tests {
1048
1040
. await ?
1049
1041
. context ( "object missing from storage" ) ?;
1050
1042
let stored_bytes = storage_stream. collect_as_bytes ( ) . await ?;
1051
- let mut zip_reader = async_zip:: read:: mem:: ZipFileReader :: new ( & stored_bytes) . await ?;
1043
+ let zip_reader =
1044
+ async_zip:: base:: read:: mem:: ZipFileReader :: new ( stored_bytes. into ( ) ) . await ?;
1052
1045
let mut zip_entries = BTreeMap :: new ( ) ;
1053
1046
let filenames: Vec < _ > = zip_reader
1047
+ . file ( )
1054
1048
. entries ( )
1055
- . into_iter ( )
1056
- . map ( |entry| entry. filename ( ) . to_string ( ) )
1049
+ . iter ( )
1050
+ . map ( |entry| entry. filename ( ) . as_str ( ) . unwrap ( ) . to_string ( ) )
1057
1051
. collect ( ) ;
1058
1052
for ( i, filename) in filenames. into_iter ( ) . enumerate ( ) {
1059
- let entry_reader = zip_reader. entry_reader ( i) . await ?;
1060
- let entry_contents = String :: from_utf8 ( entry_reader. read_to_end_crc ( ) . await ?) ?;
1053
+ let mut entry_reader = zip_reader. reader_with_entry ( i) . await ?;
1054
+ let entry_contents = entry_reader
1055
+ . read_to_string_checked_bypass_async_zip_crc_bug ( )
1056
+ . await ?;
1061
1057
zip_entries. insert ( filename, entry_contents) ;
1062
1058
}
1063
1059
assert_eq ! ( zip_entries, expected_export_entries) ;
@@ -1141,16 +1137,20 @@ mod tests {
1141
1137
. await ?
1142
1138
. context ( "object missing from storage" ) ?;
1143
1139
let stored_bytes = storage_stream. collect_as_bytes ( ) . await ?;
1144
- let mut zip_reader = async_zip:: read:: mem:: ZipFileReader :: new ( & stored_bytes) . await ?;
1140
+ let zip_reader =
1141
+ async_zip:: base:: read:: mem:: ZipFileReader :: new ( stored_bytes. into ( ) ) . await ?;
1145
1142
let mut zip_entries = BTreeMap :: new ( ) ;
1146
1143
let filenames: Vec < _ > = zip_reader
1144
+ . file ( )
1147
1145
. entries ( )
1148
- . into_iter ( )
1149
- . map ( |entry| entry. filename ( ) . to_string ( ) )
1146
+ . iter ( )
1147
+ . map ( |entry| entry. filename ( ) . as_str ( ) . unwrap ( ) . to_string ( ) )
1150
1148
. collect ( ) ;
1151
1149
for ( i, filename) in filenames. into_iter ( ) . enumerate ( ) {
1152
- let entry_reader = zip_reader. entry_reader ( i) . await ?;
1153
- let entry_contents = String :: from_utf8 ( entry_reader. read_to_end_crc ( ) . await ?) ?;
1150
+ let mut entry_reader = zip_reader. reader_with_entry ( i) . await ?;
1151
+ let entry_contents = entry_reader
1152
+ . read_to_string_checked_bypass_async_zip_crc_bug ( )
1153
+ . await ?;
1154
1154
zip_entries. insert ( filename, entry_contents) ;
1155
1155
}
1156
1156
assert_eq ! ( zip_entries, expected_export_entries) ;
0 commit comments