File tree Expand file tree Collapse file tree 1 file changed +27
-3
lines changed Expand file tree Collapse file tree 1 file changed +27
-3
lines changed Original file line number Diff line number Diff line change 7
7
package state
8
8
9
9
import (
10
+ "errors"
10
11
"fmt"
11
12
"strconv"
12
13
"strings"
14
+ "time"
13
15
14
16
"github.com/blinklabs-io/cdnsd/internal/config"
15
17
"github.com/blinklabs-io/cdnsd/internal/logging"
@@ -22,7 +24,8 @@ const (
22
24
)
23
25
24
26
type State struct {
25
- db * badger.DB
27
+ db * badger.DB
28
+ gcTimer * time.Ticker
26
29
}
27
30
28
31
var globalState = & State {}
@@ -34,15 +37,36 @@ func (s *State) Load() error {
34
37
// The default INFO logging is a bit verbose
35
38
WithLoggingLevel (badger .WARNING )
36
39
db , err := badger .Open (badgerOpts )
37
- // TODO: setup automatic GC for Badger
38
40
if err != nil {
39
41
return err
40
42
}
41
43
s .db = db
42
- //defer db.Close()
44
+ // Make sure existing DB matches current config options
43
45
if err := s .compareFingerprint (); err != nil {
44
46
return err
45
47
}
48
+ // Run GC periodically for Badger DB
49
+ s .gcTimer = time .NewTicker (5 * time .Minute )
50
+ go func () {
51
+ logger := logging .GetLogger ()
52
+ for range s .gcTimer .C {
53
+ again:
54
+ logger .Debug ("database: running GC" )
55
+ err := s .db .RunValueLogGC (0.5 )
56
+ if err != nil {
57
+ // Log any actual errors
58
+ if ! errors .Is (err , badger .ErrNoRewrite ) {
59
+ logger .Warnf (
60
+ "database: GC failure: %s" ,
61
+ err ,
62
+ )
63
+ }
64
+ } else {
65
+ // Run it again if it just ran successfully
66
+ goto again
67
+ }
68
+ }
69
+ }()
46
70
return nil
47
71
}
48
72
You can’t perform that action at this time.
0 commit comments