Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
W
wendelin.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Joshua
wendelin.core
Commits
60194645
Commit
60194645
authored
Jul 01, 2019
by
Kirill Smelkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
25ba5b0f
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
24 additions
and
15 deletions
+24
-15
wcfs/wcfs.go
wcfs/wcfs.go
+24
-15
No files found.
wcfs/wcfs.go
View file @
60194645
...
...
@@ -692,15 +692,17 @@ func traceZWatch(format string, argv ...interface{}) {
// zwatcher watches for ZODB changes.
//
// see "4) when we receive an invalidation message from ZODB ..."
/*
func (root *Root) zwatcher(ctx context.Context, zwatchq chan zodb.Event) {
err := root._zwatcher(ctx, zwatchq)
if err != nil {
panic(err) // XXX -> wg.Wait in main
}
}
*/
func
(
root
*
Root
)
_
zwatcher
(
ctx
context
.
Context
,
zwatchq
chan
zodb
.
Event
)
(
err
error
)
{
defer
xerr
.
Contextf
(
&
err
,
"zwatch %s"
,
root
.
zstor
.
URL
())
func
(
root
*
Root
)
zwatcher
(
ctx
context
.
Context
,
zwatchq
chan
zodb
.
Event
)
(
err
error
)
{
defer
xerr
.
Contextf
(
&
err
,
"zwatch %s"
,
root
.
zstor
.
URL
())
// XXX err ctx recheck
// XXX error -> always EIO for data operations
// XXX unmount -> stop
traceZWatch
(
">>>"
)
...
...
@@ -2163,7 +2165,7 @@ func _main() (err error) {
NoPool
:
true
,
})
if
err
!=
nil
{
log
.
Fatal
(
err
)
return
err
}
zhead
.
Cache
()
.
Lock
()
zhead
.
Cache
()
.
SetControl
(
&
zodbCacheControl
{})
...
...
@@ -2220,7 +2222,7 @@ func _main() (err error) {
fssrv
,
fsconn
,
err
:=
mount
(
mntpt
,
root
,
opts
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
return
err
}
groot
=
root
// FIXME temp workaround (see ^^^)
gfsconn
=
fsconn
// FIXME ----//----
...
...
@@ -2231,7 +2233,7 @@ func _main() (err error) {
kfuse
:=
fmt
.
Sprintf
(
"kernel FUSE (API %d.%d)"
,
kinit
.
Major
,
kinit
.
Minor
)
supports
:=
kinit
.
SupportsNotify
if
!
(
supports
(
fuse
.
NOTIFY_STORE_CACHE
)
&&
supports
(
fuse
.
NOTIFY_RETRIEVE_CACHE
))
{
log
.
Fatal
f
(
"%s does not support pagecache control"
,
kfuse
)
return
fmt
.
Error
f
(
"%s does not support pagecache control"
,
kfuse
)
}
// make a bold warning if kernel does not support explicit cache invalidation
// (patch sent upstream; see notes.txt -> "Notes on OS pagecache control")
...
...
@@ -2265,32 +2267,39 @@ func _main() (err error) {
fsNode
:
newFSNode
(
fSticky
),
})
// XXX place = ok?
// XXX ctx = ok? XXX -> joined ctx for fs.Serve + zwatcher ?
// XXX wait for zwatcher shutdown + log from it error
go
root
.
zwatcher
(
ctx
,
zwatchq
)
// TODO handle autoexit
// (exit when kernel forgets all our inodes - wcfs.py keeps .wcfs/zurl
// opened, so when all inodes has been forgotten - we know all wcfs.py clients exited)
_
=
autoexit
// s
erve client requests
.
// s
pawn filesystem server
.
//
// use `go serve` + `waitMount` not just `serve` - because waitMount
// cares to disable OS calling poll on us.
// ( if we don't disable polling - fs serving can get stuck - see
// https://github.com/hanwen/go-fuse/commit/4f10e248eb for details )
done
:=
make
(
chan
struct
{}
)
serveCtx
,
serveCancel
:=
context
.
WithCancel
(
context
.
Background
()
)
go
func
()
{
defer
serveCancel
()
fssrv
.
Serve
()
close
(
done
)
}()
err
=
fssrv
.
WaitMount
()
if
err
!=
nil
{
log
.
Fatal
(
err
)
// XXX err ctx?
return
err
// XXX err ctx?
}
// filesystem server is serving requests.
// run zwatcher and wait for it to complete.
// zwatcher completes either normally - due to filesystem unmount, or fails.
// if zwatcher fails - switch filesystem to return EIO instead of stale data.
err
=
root
.
zwatcher
(
serveCtx
,
zwatchq
)
if
errors
.
Cause
(
err
)
!=
context
.
Canceled
{
log
.
Error
(
err
)
log
.
Errorf
(
"-> switching filesystem to EIO mode"
)
// XXX switch fs to EIO mode
}
<-
done
// wait for unmount
<-
serveCtx
.
Done
()
return
nil
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment