@@ -190,6 +190,13 @@ func (r *Retrieval) Run(ctx context.Context) error {
190
190
return fmt .Errorf ("failed to collect content lists from the foundation Docker image of the logicalDump job: %w" , err )
191
191
}
192
192
193
+ if r .cfg .Refresh != nil && r .cfg .Refresh .SkipStartRefresh {
194
+ log .Msg ("Continue without performing initial data refresh because the `skipStartRefresh` option is enabled" )
195
+ r .setupScheduler (ctx )
196
+
197
+ return nil
198
+ }
199
+
193
200
fsManager , err := r .getNextPoolToDataRetrieving ()
194
201
if err != nil {
195
202
var skipError * SkipRefreshingError
@@ -393,6 +400,12 @@ func (r *Retrieval) RefreshData(ctx context.Context, poolName string) error {
393
400
r .State .CurrentJob = nil
394
401
}()
395
402
403
+ if r .State .Mode == models .Logical {
404
+ if err := preparePoolToRefresh (fsm , r .runner ); err != nil {
405
+ return fmt .Errorf ("failed to prepare pool for initial refresh: %w" , err )
406
+ }
407
+ }
408
+
396
409
for _ , j := range jobs {
397
410
r .State .CurrentJob = j
398
411
@@ -530,7 +543,7 @@ func (r *Retrieval) defineRetrievalMode() {
530
543
func (r * Retrieval ) setupScheduler (ctx context.Context ) {
531
544
r .stopScheduler ()
532
545
533
- if r .cfg .Refresh .Timetable == "" {
546
+ if r .cfg .Refresh == nil || r . cfg . Refresh .Timetable == "" {
534
547
return
535
548
}
536
549
@@ -608,10 +621,6 @@ func (r *Retrieval) FullRefresh(ctx context.Context) error {
608
621
609
622
log .Msg ("Pool to a full refresh: " , poolToUpdate .Pool ())
610
623
611
- if err := preparePoolToRefresh (poolToUpdate ); err != nil {
612
- return errors .Wrap (err , "failed to prepare the pool to a full refresh" )
613
- }
614
-
615
624
// Stop service containers: sync-instance, etc.
616
625
if cleanUpErr := cont .CleanUpControlContainers (runCtx , r .docker , r .engineProps .InstanceID ); cleanUpErr != nil {
617
626
log .Err ("Failed to clean up service containers:" , cleanUpErr )
@@ -641,7 +650,7 @@ func (r *Retrieval) stopScheduler() {
641
650
}
642
651
}
643
652
644
- func preparePoolToRefresh (poolToUpdate pool.FSManager ) error {
653
+ func preparePoolToRefresh (poolToUpdate pool.FSManager , runner runners. Runner ) error {
645
654
cloneList , err := poolToUpdate .ListClonesNames ()
646
655
if err != nil {
647
656
return errors .Wrap (err , "failed to check running clones" )
@@ -652,6 +661,12 @@ func preparePoolToRefresh(poolToUpdate pool.FSManager) error {
652
661
strings .Join (cloneList , " " ))
653
662
}
654
663
664
+ if _ , err := runner .Run (fmt .Sprintf ("rm -rf %s %s" ,
665
+ filepath .Join (poolToUpdate .Pool ().DataDir (), "*" ),
666
+ filepath .Join (poolToUpdate .Pool ().DataDir (), dbmarker .ConfigDir ))); err != nil {
667
+ return errors .Wrap (err , "failed to clean unix socket directory" )
668
+ }
669
+
655
670
poolToUpdate .RefreshSnapshotList ()
656
671
657
672
snapshots := poolToUpdate .SnapshotList ()
@@ -660,7 +675,11 @@ func preparePoolToRefresh(poolToUpdate pool.FSManager) error {
660
675
return nil
661
676
}
662
677
678
+ log .Msg ("Preparing pool for full data refresh; existing snapshots are to be destroyed" )
679
+
663
680
for _ , snapshotEntry := range snapshots {
681
+ log .Msg ("Destroying snapshot:" , snapshotEntry .ID )
682
+
664
683
if err := poolToUpdate .DestroySnapshot (snapshotEntry .ID ); err != nil {
665
684
return errors .Wrap (err , "failed to destroy the existing snapshot" )
666
685
}
@@ -671,9 +690,15 @@ func preparePoolToRefresh(poolToUpdate pool.FSManager) error {
671
690
672
691
// ReportState collects the current restore state.
673
692
func (r * Retrieval ) ReportState () telemetry.Restore {
693
+ var refreshingTimetable string
694
+
695
+ if r .cfg .Refresh != nil {
696
+ refreshingTimetable = r .cfg .Refresh .Timetable
697
+ }
698
+
674
699
return telemetry.Restore {
675
700
Mode : r .State .Mode ,
676
- Refreshing : r . cfg . Refresh . Timetable ,
701
+ Refreshing : refreshingTimetable ,
677
702
Jobs : r .cfg .Jobs ,
678
703
}
679
704
}
0 commit comments