Don't log errors that we expect to happen regularly.
For GoogleCloudPlatform/gcsfuse#99.geesefs-0-30-9
parent
13eb2958d3
commit
263bbab5dd
|
@ -26,6 +26,7 @@ import (
|
||||||
|
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
|
|
||||||
|
"github.com/jacobsa/fuse/fuseops"
|
||||||
"github.com/jacobsa/fuse/internal/buffer"
|
"github.com/jacobsa/fuse/internal/buffer"
|
||||||
"github.com/jacobsa/fuse/internal/freelist"
|
"github.com/jacobsa/fuse/internal/freelist"
|
||||||
"github.com/jacobsa/fuse/internal/fusekernel"
|
"github.com/jacobsa/fuse/internal/fusekernel"
|
||||||
|
@ -418,6 +419,39 @@ func (c *Connection) ReadOp() (ctx context.Context, op interface{}, err error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Skip errors that happen as a matter of course, since they spook users.
|
||||||
|
func (c *Connection) shouldLogError(
|
||||||
|
op interface{},
|
||||||
|
err error) bool {
|
||||||
|
// We don't log non-errors.
|
||||||
|
if err == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// We can't log if there's nothing to log to.
|
||||||
|
if c.errorLogger == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
switch op.(type) {
|
||||||
|
case *fuseops.LookUpInodeOp:
|
||||||
|
// It is totally normal for the kernel to ask to look up an inode by name
|
||||||
|
// and find the name doesn't exist. For example, this happens when linking
|
||||||
|
// a new file.
|
||||||
|
if err == syscall.ENOENT {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
case *unknownOp:
|
||||||
|
// Don't bother the user with methods we intentionally don't support.
|
||||||
|
if err == syscall.ENOSYS {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// Reply to an op previously read using ReadOp, with the supplied error (or nil
|
// Reply to an op previously read using ReadOp, with the supplied error (or nil
|
||||||
// if successful). The context must be the context returned by ReadOp.
|
// if successful). The context must be the context returned by ReadOp.
|
||||||
//
|
//
|
||||||
|
@ -453,7 +487,7 @@ func (c *Connection) Reply(ctx context.Context, opErr error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Error logging
|
// Error logging
|
||||||
if opErr != nil && c.errorLogger != nil {
|
if c.shouldLogError(op, opErr) {
|
||||||
c.errorLogger.Printf("%T error: %v", op, opErr)
|
c.errorLogger.Printf("%T error: %v", op, opErr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue