Skip to content

Commit b6fa775

Browse files
committed
Read FDB client traces when --debug is passed on the start.
1 parent 945dd7b commit b6fa775

4 files changed

Lines changed: 80 additions & 3 deletions

File tree

demo/tls/docker-compose.yaml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,11 @@ services:
3232
f8n-demo:
3333
container_name: f8n-demo
3434
image: ghcr.io/melgenek/f8n:v0.3.0
35-
environment:
36-
FDB_NETWORK_OPTION_TRACE_ENABLE: "/tmp"
37-
FDB_NETWORK_OPTION_TRACE_FORMAT: "json"
3835
volumes:
3936
- ./fdb_pki:/opt/fdb/tls:ro
4037
- ./etcd_pki:/opt/etcd/tls:ro
4138
command:
39+
- --debug
4240
- --endpoint
4341
- "fdb://docker:docker@fdb-demo:4500:tls"
4442
# FDB client TLS

pkg/drivers/fdb/fdb.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ func (f *FDB) Start(ctx context.Context) error {
6565
fdb.MustAPIVersion(730)
6666
f.ctx = ctx
6767

68+
if err := logFDBTraces(); err != nil {
69+
return err
70+
}
6871
if err := f.setTLSConfig(); err != nil {
6972
return err
7073
}

pkg/drivers/fdb/fdb_log_util.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package fdb
2+
3+
import (
4+
"bufio"
5+
"fmt"
6+
"github.com/apple/foundationdb/bindings/go/src/fdb"
7+
"github.com/sirupsen/logrus"
8+
"io"
9+
"os"
10+
"path/filepath"
11+
"sort"
12+
"strings"
13+
)
14+
15+
func newestTrace() (string, error) {
16+
files, _ := filepath.Glob("/tmp/trace*.json")
17+
if len(files) == 0 {
18+
return "", fmt.Errorf("no files found")
19+
}
20+
sort.Slice(files, func(i, j int) bool {
21+
fi, _ := os.Stat(files[i])
22+
fj, _ := os.Stat(files[j])
23+
return fi.ModTime().After(fj.ModTime())
24+
})
25+
return files[0], nil
26+
}
27+
28+
func followFile(file string) {
29+
f, err := os.Open(file)
30+
if err != nil {
31+
panic(err)
32+
}
33+
defer f.Close()
34+
35+
_, err = f.Seek(0, io.SeekStart)
36+
if err != nil {
37+
return
38+
}
39+
r := bufio.NewReader(f)
40+
41+
for {
42+
line, err := r.ReadString('\n')
43+
if err != nil {
44+
return
45+
}
46+
logrus.Debug(strings.TrimRight(line, "\n"))
47+
}
48+
}
49+
50+
func logFDBTraces() error {
51+
if logrus.IsLevelEnabled(logrus.DebugLevel) {
52+
if err := fdb.Options().SetTraceEnable("/tmp"); err != nil {
53+
return err
54+
}
55+
if err := fdb.Options().SetTraceFormat("json"); err != nil {
56+
return err
57+
}
58+
go func() {
59+
prevFile := ""
60+
for {
61+
nextFile, err := newestTrace()
62+
if err == nil && nextFile != prevFile {
63+
followFile(nextFile)
64+
prevFile = nextFile
65+
}
66+
}
67+
}()
68+
}
69+
return nil
70+
}

pkg/drivers/fdb/fdb_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ var connectionString = env.GetString("FDB_CONNECTION_STRING", "docker:docker@127
2626
func TestMain(m *testing.M) {
2727
CleanDirOnStart = true
2828
logrus.SetLevel(logrus.WarnLevel)
29+
logrus.SetFormatter(&logrus.JSONFormatter{
30+
FieldMap: logrus.FieldMap{
31+
logrus.FieldKeyLevel: "severity",
32+
logrus.FieldKeyMsg: "message",
33+
},
34+
})
2935
forceRetryTransaction = func(i int) bool { return i < 2 }
3036

3137
code := m.Run()

0 commit comments

Comments
 (0)