Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 507b7e1

Browse files
committed
Merge branch '605-cleanup-clone-dataset' into 'master'
fix: clean up clone dataset on destroy Closes #605 See merge request postgres-ai/database-lab!1052
2 parents fe79838 + 1524b7d commit 507b7e1

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

‎engine/internal/cloning/base.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,8 +387,13 @@ func (c *Base) destroyClone(cloneID string, w *CloneWrapper) {
387387
if w.Clone.Snapshot != nil {
388388
c.decrementCloneNumber(w.Clone.Snapshot.ID)
389389
}
390+
390391
c.observingCh <- cloneID
391392

393+
if err := c.provision.CleanupCloneDataset(w.Clone, w.Clone.Snapshot.Pool); err != nil {
394+
log.Errf("failed to cleanup clone dataset: %v", err)
395+
}
396+
392397
c.SaveClonesState()
393398

394399
c.webhookCh <- webhooks.CloneEvent{

‎engine/internal/provision/mode_local.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -571,6 +571,48 @@ func (p *Provisioner) StopAllSessions(exceptClones map[string]struct{}) error {
571571
return nil
572572
}
573573

574+
func reviewDown(repo *models.Repo, cloneDataset string) string {
575+
for snapshotID := range repo.Snapshots {
576+
if strings.HasPrefix(snapshotID, cloneDataset) {
577+
return snapshotID
578+
}
579+
}
580+
581+
return ""
582+
}
583+
584+
// CleanupCloneDataset removes a clone dataset.
585+
func (p *Provisioner) CleanupCloneDataset(clone *models.Clone, pool string) error {
586+
if clone.Snapshot == nil {
587+
return fmt.Errorf("clone has no snapshot, so the pool cannot be determined. Skip cleanup")
588+
}
589+
590+
fsm, err := p.pm.GetFSManager(clone.Snapshot.Pool)
591+
if err != nil {
592+
return fmt.Errorf("cannot work with pool %s: %w", pool, err)
593+
}
594+
595+
repo, err := fsm.GetRepo()
596+
if err != nil {
597+
return fmt.Errorf("failed to get snapshots: %w", err)
598+
}
599+
600+
snapshotDep := reviewDown(repo, branching.CloneName(pool, clone.Branch, clone.ID, clone.Revision))
601+
if snapshotDep != "" {
602+
log.Dbg(fmt.Sprintf("Dataset has commit: %s. Skip destroying", snapshotDep))
603+
604+
return nil
605+
}
606+
607+
if clone.Revision == branching.DefaultRevision && !clone.HasDependent {
608+
if err := fsm.DestroyDataset(branching.CloneDataset(pool, clone.Branch, clone.ID)); err != nil {
609+
return fmt.Errorf("failed to destroy clone dataset: %w", err)
610+
}
611+
}
612+
613+
return nil
614+
}
615+
574616
func (p *Provisioner) stopPoolSessions(fsm pool.FSManager, exceptClones map[string]struct{}) error {
575617
fsPool := fsm.Pool()
576618

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /