Skip to content

Commit 583e7d3

Browse files
authored
Merge pull request #286 from Thiht/improvements
revert: persistence service to clean up before saving sessions rather than afterwards
2 parents 5bc7ada + 6b3d9e8 commit 583e7d3

File tree

1 file changed

+24
-35
lines changed

1 file changed

+24
-35
lines changed

server/services/persistence.go

Lines changed: 24 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,8 @@ type Persistence interface {
2626
StoreSessions(types.Sessions)
2727
}
2828

29-
var mu sync.Mutex
30-
3129
type persistence struct {
30+
mu sync.Mutex
3231
persistenceDirectory string
3332
}
3433

@@ -40,8 +39,8 @@ func NewPersistence(persistenceDirectory string) Persistence {
4039
}
4140

4241
func (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

5958
func (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

7675
func (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

102101
func (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

139139
func (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

Comments
 (0)