1
1
package controller
2
2
3
3
import (
4
+ "bufio"
5
+ "compress/gzip"
4
6
"encoding/json"
5
7
"github.com/pkg/errors"
6
8
"io/ioutil"
@@ -12,7 +14,7 @@ import (
12
14
13
15
const maxHistorySize = 10
14
16
const stateFilename = "gc-state.json"
15
- const backupFilename = "gc-state.backup"
17
+ const backupFilename = "gc-state.backup.gz "
16
18
17
19
type PersistentState struct {
18
20
CurrentState * GameControllerState `json:"currentState"`
@@ -70,8 +72,10 @@ func (s *PersistentState) RevertProtocolEntry(id string) error {
70
72
}
71
73
72
74
type StatePreserver struct {
73
- file * os.File
74
- backupFile * os.File
75
+ file * os.File
76
+ backupFile * os.File
77
+ backupWriter * bufio.Writer
78
+ backupWriterGzip * gzip.Writer
75
79
}
76
80
77
81
// Open opens the state and backup file
@@ -87,6 +91,8 @@ func (r *StatePreserver) Open() error {
87
91
return err
88
92
}
89
93
r .backupFile = f
94
+ r .backupWriterGzip = gzip .NewWriter (r .backupFile )
95
+ r .backupWriter = bufio .NewWriter (r .backupWriterGzip )
90
96
return nil
91
97
}
92
98
@@ -110,6 +116,12 @@ func (r *StatePreserver) Close() {
110
116
}
111
117
}
112
118
if r .backupFile != nil {
119
+ if err := r .backupWriter .Flush (); err != nil {
120
+ log .Print ("Could not flush backup writer: " , err )
121
+ }
122
+ if err := r .backupWriterGzip .Close (); err != nil {
123
+ log .Print ("Could not close backup writer: " , err )
124
+ }
113
125
if err := r .backupFile .Close (); err != nil {
114
126
log .Print ("Could not close backup file" , err )
115
127
}
@@ -160,8 +172,11 @@ func (r *StatePreserver) Save(state *PersistentState) {
160
172
return
161
173
}
162
174
jsonCompact = append (jsonCompact , []byte ("\n " )... )
163
- _ , err = r .backupFile .Write (jsonCompact )
175
+ _ , err = r .backupWriter .Write (jsonCompact )
164
176
if err != nil {
165
177
log .Print ("Could not write to backup file: " , err )
166
178
}
179
+ if err := r .backupWriter .Flush (); err != nil {
180
+ log .Print ("Could not flush backup writer: " , err )
181
+ }
167
182
}
0 commit comments