Use FileSystem in flushfs.
parent
e0aecb1d0b
commit
beb1ac7430
|
@ -16,12 +16,12 @@ package flushfs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"os"
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/jacobsa/fuse"
|
"github.com/jacobsa/fuse"
|
||||||
"github.com/jacobsa/fuse/fuseops"
|
"github.com/jacobsa/fuse/fuseops"
|
||||||
|
"github.com/jacobsa/fuse/fuseutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Create a file system whose sole contents are a file named "foo" and a
|
// Create a file system whose sole contents are a file named "foo" and a
|
||||||
|
@ -35,11 +35,12 @@ import (
|
||||||
func NewFileSystem(
|
func NewFileSystem(
|
||||||
reportFlush func(string) error,
|
reportFlush func(string) error,
|
||||||
reportFsync func(string) error) (server fuse.Server, err error) {
|
reportFsync func(string) error) (server fuse.Server, err error) {
|
||||||
server = &flushFS{
|
fs := &flushFS{
|
||||||
reportFlush: reportFlush,
|
reportFlush: reportFlush,
|
||||||
reportFsync: reportFsync,
|
reportFsync: reportFsync,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
server = fuseutil.NewFileSystemServer(fs)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,6 +50,8 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
type flushFS struct {
|
type flushFS struct {
|
||||||
|
fuseutil.NotImplementedFileSystem
|
||||||
|
|
||||||
reportFlush func(string) error
|
reportFlush func(string) error
|
||||||
reportFsync func(string) error
|
reportFsync func(string) error
|
||||||
|
|
||||||
|
@ -85,67 +88,17 @@ func (fs *flushFS) barAttributes() fuseops.InodeAttributes {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// LOCKS_REQUIRED(fs.mu)
|
|
||||||
func (fs *flushFS) ServeOps(c *fuse.Connection) {
|
|
||||||
for {
|
|
||||||
op, err := c.ReadOp()
|
|
||||||
if err == io.EOF {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
switch typed := op.(type) {
|
|
||||||
case *fuseops.InitOp:
|
|
||||||
fs.init(typed)
|
|
||||||
|
|
||||||
case *fuseops.LookUpInodeOp:
|
|
||||||
fs.lookUpInode(typed)
|
|
||||||
|
|
||||||
case *fuseops.GetInodeAttributesOp:
|
|
||||||
fs.getInodeAttributes(typed)
|
|
||||||
|
|
||||||
case *fuseops.OpenFileOp:
|
|
||||||
fs.openFile(typed)
|
|
||||||
|
|
||||||
case *fuseops.ReadFileOp:
|
|
||||||
fs.readFile(typed)
|
|
||||||
|
|
||||||
case *fuseops.WriteFileOp:
|
|
||||||
fs.writeFile(typed)
|
|
||||||
|
|
||||||
case *fuseops.SyncFileOp:
|
|
||||||
fs.syncFile(typed)
|
|
||||||
|
|
||||||
case *fuseops.FlushFileOp:
|
|
||||||
fs.flushFile(typed)
|
|
||||||
|
|
||||||
case *fuseops.OpenDirOp:
|
|
||||||
fs.openDir(typed)
|
|
||||||
|
|
||||||
default:
|
|
||||||
typed.Respond(fuse.ENOSYS)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// Op methods
|
// Op methods
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
func (fs *flushFS) init(op *fuseops.InitOp) {
|
func (fs *flushFS) Init(
|
||||||
var err error
|
op *fuseops.InitOp) (err error) {
|
||||||
defer func() { op.Respond(err) }()
|
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *flushFS) lookUpInode(op *fuseops.LookUpInodeOp) {
|
func (fs *flushFS) LookUpInode(
|
||||||
var err error
|
op *fuseops.LookUpInodeOp) (err error) {
|
||||||
defer func() { op.Respond(err) }()
|
|
||||||
|
|
||||||
fs.mu.Lock()
|
fs.mu.Lock()
|
||||||
defer fs.mu.Unlock()
|
defer fs.mu.Unlock()
|
||||||
|
|
||||||
|
@ -177,10 +130,8 @@ func (fs *flushFS) lookUpInode(op *fuseops.LookUpInodeOp) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *flushFS) getInodeAttributes(op *fuseops.GetInodeAttributesOp) {
|
func (fs *flushFS) GetInodeAttributes(
|
||||||
var err error
|
op *fuseops.GetInodeAttributesOp) (err error) {
|
||||||
defer func() { op.Respond(err) }()
|
|
||||||
|
|
||||||
fs.mu.Lock()
|
fs.mu.Lock()
|
||||||
defer fs.mu.Unlock()
|
defer fs.mu.Unlock()
|
||||||
|
|
||||||
|
@ -203,10 +154,8 @@ func (fs *flushFS) getInodeAttributes(op *fuseops.GetInodeAttributesOp) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *flushFS) openFile(op *fuseops.OpenFileOp) {
|
func (fs *flushFS) OpenFile(
|
||||||
var err error
|
op *fuseops.OpenFileOp) (err error) {
|
||||||
defer func() { op.Respond(err) }()
|
|
||||||
|
|
||||||
fs.mu.Lock()
|
fs.mu.Lock()
|
||||||
defer fs.mu.Unlock()
|
defer fs.mu.Unlock()
|
||||||
|
|
||||||
|
@ -219,10 +168,8 @@ func (fs *flushFS) openFile(op *fuseops.OpenFileOp) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *flushFS) readFile(op *fuseops.ReadFileOp) {
|
func (fs *flushFS) ReadFile(
|
||||||
var err error
|
op *fuseops.ReadFileOp) (err error) {
|
||||||
defer func() { op.Respond(err) }()
|
|
||||||
|
|
||||||
fs.mu.Lock()
|
fs.mu.Lock()
|
||||||
defer fs.mu.Unlock()
|
defer fs.mu.Unlock()
|
||||||
|
|
||||||
|
@ -238,10 +185,8 @@ func (fs *flushFS) readFile(op *fuseops.ReadFileOp) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *flushFS) writeFile(op *fuseops.WriteFileOp) {
|
func (fs *flushFS) WriteFile(
|
||||||
var err error
|
op *fuseops.WriteFileOp) (err error) {
|
||||||
defer func() { op.Respond(err) }()
|
|
||||||
|
|
||||||
fs.mu.Lock()
|
fs.mu.Lock()
|
||||||
defer fs.mu.Unlock()
|
defer fs.mu.Unlock()
|
||||||
|
|
||||||
|
@ -263,10 +208,8 @@ func (fs *flushFS) writeFile(op *fuseops.WriteFileOp) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *flushFS) syncFile(op *fuseops.SyncFileOp) {
|
func (fs *flushFS) SyncFile(
|
||||||
var err error
|
op *fuseops.SyncFileOp) (err error) {
|
||||||
defer func() { op.Respond(err) }()
|
|
||||||
|
|
||||||
fs.mu.Lock()
|
fs.mu.Lock()
|
||||||
defer fs.mu.Unlock()
|
defer fs.mu.Unlock()
|
||||||
|
|
||||||
|
@ -274,10 +217,8 @@ func (fs *flushFS) syncFile(op *fuseops.SyncFileOp) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *flushFS) flushFile(op *fuseops.FlushFileOp) {
|
func (fs *flushFS) FlushFile(
|
||||||
var err error
|
op *fuseops.FlushFileOp) (err error) {
|
||||||
defer func() { op.Respond(err) }()
|
|
||||||
|
|
||||||
fs.mu.Lock()
|
fs.mu.Lock()
|
||||||
defer fs.mu.Unlock()
|
defer fs.mu.Unlock()
|
||||||
|
|
||||||
|
@ -285,10 +226,8 @@ func (fs *flushFS) flushFile(op *fuseops.FlushFileOp) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *flushFS) openDir(op *fuseops.OpenDirOp) {
|
func (fs *flushFS) OpenDir(
|
||||||
var err error
|
op *fuseops.OpenDirOp) (err error) {
|
||||||
defer func() { op.Respond(err) }()
|
|
||||||
|
|
||||||
fs.mu.Lock()
|
fs.mu.Lock()
|
||||||
defer fs.mu.Unlock()
|
defer fs.mu.Unlock()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue