@@ -26,9 +26,8 @@ type Persistence interface {
2626 StoreSessions (types.Sessions )
2727}
2828
29- var mu sync.Mutex
30-
3129type persistence struct {
30+ mu sync.Mutex
3231 persistenceDirectory string
3332}
3433
@@ -40,8 +39,8 @@ func NewPersistence(persistenceDirectory string) Persistence {
4039}
4140
4241func (p * persistence ) StoreMocks (sessionID string , mocks types.Mocks ) {
43- mu .Lock ()
44- defer mu .Unlock ()
42+ p . mu .Lock ()
43+ defer p . mu .Unlock ()
4544 if p .persistenceDirectory == "" {
4645 return
4746 }
@@ -57,8 +56,8 @@ func (p *persistence) StoreMocks(sessionID string, mocks types.Mocks) {
5756}
5857
5958func (p * persistence ) StoreHistory (sessionID string , history types.History ) {
60- mu .Lock ()
61- defer mu .Unlock ()
59+ p . mu .Lock ()
60+ defer p . mu .Unlock ()
6261 if p .persistenceDirectory == "" {
6362 return
6463 }
@@ -74,8 +73,8 @@ func (p *persistence) StoreHistory(sessionID string, history types.History) {
7473}
7574
7675func (p * persistence ) StoreSession (summary []types.SessionSummary , session * types.Session ) {
77- mu .Lock ()
78- defer mu .Unlock ()
76+ p . mu .Lock ()
77+ defer p . mu .Unlock ()
7978 if p .persistenceDirectory == "" {
8079 return
8180 }
@@ -100,11 +99,15 @@ func (p *persistence) StoreSession(summary []types.SessionSummary, session *type
10099}
101100
102101func (p * persistence ) StoreSessions (sessions types.Sessions ) {
103- mu .Lock ()
104- defer mu .Unlock ()
102+ p . mu .Lock ()
103+ defer p . mu .Unlock ()
105104 if p .persistenceDirectory == "" {
106105 return
107106 }
107+ if err := p .cleanAll (); err != nil {
108+ log .Error ("unable to clean directory: " , err )
109+ return
110+ }
108111 var sessionsGroup errgroup.Group
109112 for _ , ses := range sessions {
110113 session := * ses
@@ -131,14 +134,11 @@ func (p *persistence) StoreSessions(sessions types.Sessions) {
131134 if err := sessionsGroup .Wait (); err != nil {
132135 log .Error ("unable to store sessions: " , err )
133136 }
134- if err := p .cleanOutdatedSessions (sessions ); err != nil {
135- log .Error ("unable to clean outdated sessions: " , err )
136- }
137137}
138138
139139func (p * persistence ) LoadSessions () (types.Sessions , error ) {
140- mu .Lock ()
141- defer mu .Unlock ()
140+ p . mu .Lock ()
141+ defer p . mu .Unlock ()
142142 if p .persistenceDirectory == "" {
143143 return nil , nil
144144 }
@@ -147,9 +147,6 @@ func (p *persistence) LoadSessions() (types.Sessions, error) {
147147 }
148148 file , err := os .Open (filepath .Join (p .persistenceDirectory , sessionsFileName ))
149149 if err != nil {
150- if err == os .ErrNotExist {
151- return types.Sessions {}, nil
152- }
153150 return nil , err
154151 }
155152 defer file .Close ()
@@ -218,10 +215,6 @@ func (p *persistence) LoadSessions() (types.Sessions, error) {
218215 if err := sessionsGroup .Wait (); err != nil {
219216 return nil , err
220217 }
221- if err := p .cleanOutdatedSessions (sessions ); err != nil {
222- return nil , err
223- }
224-
225218 return sessions , nil
226219}
227220
@@ -278,23 +271,19 @@ func (p *persistence) persistSessionsSummary(summary []types.SessionSummary) err
278271 return nil
279272}
280273
281- func (p * persistence ) cleanOutdatedSessions (sessions types.Sessions ) error {
282- sessionsIDs := make (map [string ]bool , len (sessions ))
283- for _ , ses := range sessions {
284- session := * ses
285- sessionsIDs [session .ID ] = true
274+ func (p * persistence ) cleanAll () error {
275+ if err := os .MkdirAll (p .persistenceDirectory , os .ModePerm ); err != nil && ! os .IsExist (err ) {
276+ log .WithError (err ).Errorf ("Unable to ensure that directory %q exists" , p .persistenceDirectory )
277+ return err
286278 }
287- log .Debug ("Clean old sessions" )
288- entries , err := os .ReadDir (p .persistenceDirectory )
279+ log .Debug ("Cleanning old sessions" )
280+ files , err := os .ReadDir (p .persistenceDirectory )
289281 if err != nil {
282+ log .WithError (err ).Errorf ("Unable to browse directory %q" , p .persistenceDirectory )
290283 return err
291284 }
292- for _ , entry := range entries {
293- if entry .IsDir () && ! sessionsIDs [entry .Name ()] {
294- path := filepath .Join (p .persistenceDirectory , entry .Name ())
295- log .Debugf ("Removing directory: %q" , path )
296- os .RemoveAll (path )
297- }
285+ for _ , file := range files {
286+ os .RemoveAll (filepath .Join (p .persistenceDirectory , file .Name ()))
298287 }
299288 return nil
300289}
0 commit comments