-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdiff.go
More file actions
86 lines (76 loc) · 1.7 KB
/
diff.go
File metadata and controls
86 lines (76 loc) · 1.7 KB
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
82
83
84
85
86
package main
import (
"bufio"
"fmt"
"log"
"os"
bolt "go.etcd.io/bbolt"
)
func diff(config *Config, sourceDb string) {
log.Print("diff started")
sdb, err := bolt.Open(sourceDb, 0600, nil)
if err != nil {
log.Printf("can't open db %s with error: %v", sourceDb, err)
return
}
defer sdb.Close()
db, err := bolt.Open(config.Db, 0600, nil)
if err != nil {
log.Printf("can't open db %s with error: %v", config.Db, err)
return
}
defer db.Close()
defer closeDiffLogWriter()
sdb.View(func(tx *bolt.Tx) error {
db.View(func(tx2 *bolt.Tx) error {
for bucket := range config.Dirs {
sbucket := tx.Bucket([]byte(bucket))
if sbucket == nil {
continue
}
tbucket := tx2.Bucket([]byte(bucket))
if tbucket == nil {
fmt.Printf("bucket %s bucket is missing\n", bucket)
}
sbucket.ForEach(func(k, v []byte) error {
vt := tbucket.Get(k)
if vt == nil {
writeDiffLog(bucket, string(k), "missing")
} else if string(vt) != string(v) {
writeDiffLog(bucket, string(k), "checksum wrong")
}
return nil
})
}
return nil
})
return nil
})
}
var diffLogFile *os.File
var diffLogWriter *bufio.Writer
func getDiffLogWriter() *bufio.Writer {
if diffLogWriter != nil {
return diffLogWriter
} else {
f, err := os.Create("diffresult.csv")
if err != nil {
panic(err)
}
diffLogFile = f
diffLogWriter = bufio.NewWriter(f)
return diffLogWriter
}
}
func closeDiffLogWriter() {
if diffLogWriter != nil {
diffLogWriter.Flush()
diffLogFile.Close()
}
}
func writeDiffLog(bucket string, path string, diff string) {
line := fmt.Sprintf("%s,%s,%s\n", bucket, path, diff)
writer := getDiffLogWriter()
writer.WriteString(line)
writer.Flush()
}