/
serialization.go
81 lines (71 loc) · 1.77 KB
/
serialization.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package bloom
import (
"fmt"
"os"
"path/filepath"
baseBloomfilter "github.com/devopsfaith/bloomfilter/bloomfilter"
"github.com/rs/zerolog/log"
)
func saveFilters(path string, filters *bloomFilters) {
var err error
var nilFilter *baseBloomfilter.Bloomfilter
files := map[string]*baseBloomfilter.Bloomfilter{
canonicalStemFile: filters.canonicalStem,
sizesFile: nilFilter,
}
for f, filter := range files {
var file *os.File
filePath := filepath.Join(path, f)
file, err = createFile(filePath)
if err != nil {
log.Fatal().Err(err).Msgf("Cannot create %s", filePath)
}
if f == sizesFile {
err = saveSizesFile(file, filters)
if err != nil {
log.Fatal().Err(err).Msg("Cannot create sizesFile")
}
continue
}
err = saveFilterFile(filePath, file, filter)
if err != nil {
log.Fatal().Err(err).Msgf("Cannot create %s", filePath)
}
}
if err == nil {
log.Info().Msg("Saved cached filters to disk")
}
}
func createFile(filePath string) (*os.File, error) {
file, err := os.Create(filePath)
if err != nil {
log.Warn().Err(err).Msgf("Could not create file %s", filePath)
}
return file, err
}
func saveFilterFile(
filePath string,
file *os.File,
filter *baseBloomfilter.Bloomfilter,
) error {
var bin []byte
var err error
bin, err = filter.MarshalBinary()
if err != nil {
log.Warn().Err(err).Msgf("Could not serialize for %s", filePath)
}
_, err = file.Write(bin)
if err != nil {
log.Warn().Err(err).Msgf("Could not save %s", filePath)
}
return err
}
func saveSizesFile(file *os.File, filters *bloomFilters) error {
var err error
sizes := fmt.Sprintf("CanonicalSize,%d\n",
filters.canonicalSize)
if _, err = file.WriteString(sizes); err != nil {
log.Warn().Err(err).Msg("Could not save filter sizes to disk")
}
return err
}