@@ -274,10 +274,8 @@ func (p *Provisioner) ResetSession(session *resources.Session, clone *models.Clo
274274 return nil , errors .Wrap (err , "failed to stop container" )
275275 }
276276
277- if clone .Revision == branching .DefaultRevision || ! clone .HasDependent {
278- if err = fsm .DestroyClone (clone .Branch , name , clone .Revision ); err != nil {
279- return nil , errors .Wrap (err , "failed to destroy clone" )
280- }
277+ if err = fsm .DestroyClone (clone .Branch , name , clone .Revision ); err != nil {
278+ return nil , errors .Wrap (err , "failed to destroy clone" )
281279 }
282280
283281 if err = newFSManager .CreateClone (clone .Branch , name , snapshot .ID , clone .Revision ); err != nil {
@@ -300,9 +298,14 @@ func (p *Provisioner) ResetSession(session *resources.Session, clone *models.Clo
300298 }
301299
302300 snapshotModel := & models.Snapshot {
303- ID : snapshot .ID ,
304- CreatedAt : models .NewLocalTime (snapshot .CreatedAt ),
305- DataStateAt : models .NewLocalTime (snapshot .DataStateAt ),
301+ ID : snapshot .ID ,
302+ CreatedAt : models .NewLocalTime (snapshot .CreatedAt ),
303+ DataStateAt : models .NewLocalTime (snapshot .DataStateAt ),
304+ PhysicalSize : snapshot .Used ,
305+ LogicalSize : snapshot .LogicalReferenced ,
306+ Pool : snapshot .Pool ,
307+ Branch : snapshot .Branch ,
308+ Message : snapshot .Message ,
306309 }
307310
308311 return snapshotModel , nil
@@ -335,6 +338,31 @@ func (p *Provisioner) GetSessionState(s *resources.Session, branch, cloneID stri
335338 return fsm .GetSessionState (branch , cloneID )
336339}
337340
341+ // GetBatchSessionState retrieves session states for multiple clones efficiently.
342+ func (p * Provisioner ) GetBatchSessionState (batch map [string ][]resources.SessionStateRequest ) (map [string ]resources.SessionState , error ) {
343+ batchResults := make (map [string ]resources.SessionState )
344+ 345+ for poolName , reqs := range batch {
346+ fsm , err := p .pm .GetFSManager (poolName )
347+ if err != nil {
348+ log .Err (fmt .Sprintf ("failed to find filesystem manager for pool %s: %v" , poolName , err ))
349+ continue
350+ }
351+ 352+ results , err := fsm .GetBatchSessionState (reqs )
353+ if err != nil {
354+ log .Err (fmt .Sprintf ("failed to get batch session state for pool %s: %v" , poolName , err ))
355+ continue
356+ }
357+ 358+ for cloneID , state := range results {
359+ batchResults [cloneID ] = state
360+ }
361+ }
362+ 363+ return batchResults , nil
364+ }
365+ 338366// GetPoolEntryList provides an ordered list of available pools.
339367func (p * Provisioner ) GetPoolEntryList () []models.PoolEntry {
340368 fsmList := p .pm .GetFSManagerOrderedList ()
@@ -604,10 +632,8 @@ func (p *Provisioner) CleanupCloneDataset(clone *models.Clone, pool string) erro
604632 return nil
605633 }
606634
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- }
635+ if err = fsm .DestroyClone (clone .Branch , clone .ID , clone .Revision ); err != nil {
636+ return fmt .Errorf ("failed to destroy clone: %w" , err )
611637 }
612638
613639 return nil
0 commit comments