@@ -23,7 +23,7 @@ use database::{
2323 SystemMetadataModel ,
2424} ;
2525use exports:: {
26- export_inner ,
26+ interface :: ExportProvider ,
2727 ExportComponents ,
2828} ;
2929use futures:: {
@@ -63,6 +63,7 @@ pub struct ExportWorker<RT: Runtime> {
6363 pub ( super ) database : Database < RT > ,
6464 pub ( super ) storage : Arc < dyn Storage > ,
6565 pub ( super ) file_storage : Arc < dyn Storage > ,
66+ pub ( super ) export_provider : Arc < dyn ExportProvider < RT > > ,
6667 pub ( super ) backoff : Backoff ,
6768 pub ( super ) usage_tracking : UsageCounter ,
6869 pub ( super ) instance_name : String ,
@@ -75,6 +76,7 @@ impl<RT: Runtime> ExportWorker<RT> {
7576 database : Database < RT > ,
7677 storage : Arc < dyn Storage > ,
7778 file_storage : Arc < dyn Storage > ,
79+ export_provider : Arc < dyn ExportProvider < RT > > ,
7880 usage_tracking : UsageCounter ,
7981 instance_name : String ,
8082 ) -> impl Future < Output = ( ) > + Send {
@@ -83,6 +85,7 @@ impl<RT: Runtime> ExportWorker<RT> {
8385 database,
8486 storage,
8587 file_storage,
88+ export_provider,
8689 backoff : Backoff :: new ( INITIAL_BACKOFF , MAX_BACKOFF ) ,
8790 usage_tracking,
8891 instance_name,
@@ -179,22 +182,22 @@ impl<RT: Runtime> ExportWorker<RT> {
179182 let database_snapshot = self . database . latest_database_snapshot ( ) ?;
180183 let snapshot_ts = * database_snapshot. timestamp ( ) ;
181184 tracing:: info!( %snapshot_ts, "Export {id} beginning..." ) ;
185+ let components = ExportComponents {
186+ runtime : self . runtime . clone ( ) ,
187+ database : database_snapshot,
188+ storage : self . storage . clone ( ) ,
189+ file_storage : self . file_storage . clone ( ) ,
190+ instance_name : self . instance_name . clone ( ) ,
191+ } ;
182192 let ( object_key, usage) = {
183193 let database_ = self . database . clone ( ) ;
184- let export_future = async {
185- let database_ = self . database . clone ( ) ;
186-
187- export_inner (
188- & ExportComponents {
189- runtime : self . runtime . clone ( ) ,
190- database : database_snapshot,
191- storage : self . storage . clone ( ) ,
192- file_storage : self . file_storage . clone ( ) ,
193- instance_name : self . instance_name . clone ( ) ,
194- } ,
195- format,
196- requestor,
197- |msg| async {
194+ let export_future = self . export_provider . export (
195+ & components,
196+ format,
197+ requestor,
198+ Box :: new ( move |msg| {
199+ let database_ = database_. clone ( ) ;
200+ async move {
198201 tracing:: info!( "Export {id} progress: {msg}" ) ;
199202 database_
200203 . execute_with_occ_retries (
@@ -221,12 +224,12 @@ impl<RT: Runtime> ExportWorker<RT> {
221224 )
222225 . await ?;
223226 Ok ( ( ) )
224- } ,
225- )
226- . await
227- } ;
228- tokio:: pin!( export_future) ;
227+ }
228+ . boxed ( )
229+ } ) ,
230+ ) ;
229231
232+ let database_ = self . database . clone ( ) ;
230233 // In parallel, monitor the export document to check for cancellation
231234 let monitor_export = async move {
232235 loop {
0 commit comments