4
4
"fmt"
5
5
"io"
6
6
"os"
7
+
8
+ "github.com/chia-network/go-modules/pkg/slogs"
7
9
)
8
10
9
11
// DirectFile is a wrapper around os.File that ensures aligned reads for O_DIRECT support,
@@ -48,6 +50,11 @@ func (df *DirectFile) Read(p []byte) (n int, err error) {
48
50
return 0 , fmt .Errorf ("failed to create aligned buffer: %w" , err )
49
51
}
50
52
53
+ req := len (p )
54
+ act := len (buf )
55
+ percent := act / req * 100
56
+ safeLog ("Read into aligned buffer" , "requested" , req , "reading" , act , "percentage of requested" , percent )
57
+
51
58
// Perform the read
52
59
n , err = df .file .Read (buf )
53
60
if n > len (p ) {
@@ -77,6 +84,11 @@ func (df *DirectFile) ReadAt(p []byte, off int64) (n int, err error) {
77
84
return 0 , fmt .Errorf ("failed to create aligned buffer: %w" , err )
78
85
}
79
86
87
+ req := len (p )
88
+ act := len (buf )
89
+ percent := act / req * 100
90
+ safeLog ("ReadAt into aligned buffer" , "requested" , req , "reading" , act , "percentage of requested" , percent )
91
+
80
92
// Perform the read at the aligned offset
81
93
n , err = df .file .ReadAt (buf , int64 (alignedOffset ))
82
94
if err != nil && err != io .EOF {
@@ -95,3 +107,9 @@ func (df *DirectFile) ReadAt(p []byte, off int64) (n int, err error) {
95
107
copy (p , buf [offsetDiff :offsetDiff + copyLen ])
96
108
return copyLen , nil
97
109
}
110
+
111
+ func safeLog (msg string , args ... any ) {
112
+ if slogs .Logr .Logger != nil {
113
+ slogs .Logr .Debug (msg , args ... )
114
+ }
115
+ }
0 commit comments