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
5454a41c
Commit
5454a41c
authored
Jun 27, 2018
by
Kirill Smelkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
c2e53f66
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
62 additions
and
4 deletions
+62
-4
wcfs/wcfs.go
wcfs/wcfs.go
+34
-3
wcfs/wcfs_test.py
wcfs/wcfs_test.py
+28
-1
No files found.
wcfs/wcfs.go
View file @
5454a41c
...
@@ -242,15 +242,35 @@ package main
...
@@ -242,15 +242,35 @@ package main
// tell the kernel it is fully responsible for invalidating pagecache.
// tell the kernel it is fully responsible for invalidating pagecache.
import
(
import
(
"context"
"flag"
"flag"
"log"
"log"
"os"
"os"
"github.com/hanwen/go-fuse/fuse/nodefs"
"github.com/hanwen/go-fuse/fuse/nodefs"
"lab.nexedi.com/kirr/neo/go/zodb"
)
)
// option to prevent starting if wcfs was already started ?
// BigFileRoot represents "/bigfile"
// option to automatically exit/unmount if there are no requests for some t (UC: autospawned from join)
type
BigFileRoot
struct
{
nodefs
.
Node
zstor
zodb
.
IStorage
}
func
NewBigFileRoot
(
zstor
zodb
.
IStorage
)
*
BigFileRoot
{
return
&
BigFileRoot
{
Node
:
nodefs
.
NewDefaultNode
(),
zstor
:
zstor
,
}
}
// XXX option to prevent starting if wcfs was already started ?
// XXX option to automatically exit/unmount if there are no requests for some t
// (UC: autospawned from join)
func
main
()
{
func
main
()
{
log
.
SetPrefix
(
"wcfs: "
)
log
.
SetPrefix
(
"wcfs: "
)
...
@@ -263,6 +283,16 @@ func main() {
...
@@ -263,6 +283,16 @@ func main() {
zurl
:=
flag
.
Args
()[
0
]
zurl
:=
flag
.
Args
()[
0
]
mntpt
:=
flag
.
Args
()[
1
]
mntpt
:=
flag
.
Args
()[
1
]
// open zodb storage
ctx
:=
context
.
Background
()
// XXX + timeout?
zstor
,
err
:=
zodb
.
OpenStorage
(
ctx
,
zurl
,
&
zodb
.
OpenOptions
{
ReadOnly
:
true
})
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
defer
zstor
.
Close
()
// mount root
opts
:=
nodefs
.
NewOptions
()
opts
:=
nodefs
.
NewOptions
()
opts
.
Debug
=
*
debug
opts
.
Debug
=
*
debug
...
@@ -275,7 +305,8 @@ func main() {
...
@@ -275,7 +305,8 @@ func main() {
// add entries to /
// add entries to /
mkfile
(
root
,
".wcfs"
,
NewStaticFile
([]
byte
(
zurl
)))
mkfile
(
root
,
".wcfs"
,
NewStaticFile
([]
byte
(
zurl
)))
//mkdir(root, "bigfile", ...
)
mkdir
(
root
,
"bigfile"
,
NewBigFileRoot
(
zstor
)
)
// serve client requests
server
.
Serve
()
// XXX Serve returns no eror
server
.
Serve
()
// XXX Serve returns no eror
}
}
wcfs/wcfs_test.py
View file @
5454a41c
...
@@ -19,8 +19,10 @@
...
@@ -19,8 +19,10 @@
# See https://www.nexedi.com/licensing for rationale and options.
# See https://www.nexedi.com/licensing for rationale and options.
from
wendelin.lib.testing
import
getTestDB
from
wendelin.lib.testing
import
getTestDB
from
wendelin.bigfile.file_zodb
import
ZBigFile
from
wendelin.bigfile.tests.test_filezodb
import
blksize
from
wendelin
import
wcfs
from
wendelin
import
wcfs
from
golang
import
go
,
cha
n
import
transactio
n
import
os
,
os
.
path
,
subprocess
import
os
,
os
.
path
,
subprocess
from
pytest
import
raises
from
pytest
import
raises
...
@@ -77,6 +79,7 @@ def test_join():
...
@@ -77,6 +79,7 @@ def test_join():
wc
=
wcfs
.
_start
(
zurl
)
wc
=
wcfs
.
_start
(
zurl
)
assert
wc
.
mountpoint
==
testmntpt
assert
wc
.
mountpoint
==
testmntpt
assert
readfile
(
wc
.
mountpoint
+
"/.wcfs"
)
==
zurl
assert
readfile
(
wc
.
mountpoint
+
"/.wcfs"
)
==
zurl
assert
os
.
path
.
isdir
(
wc
.
mountpoint
+
"/bigfile"
)
wc2
=
wcfs
.
join
(
zurl
,
autostart
=
False
)
wc2
=
wcfs
.
join
(
zurl
,
autostart
=
False
)
assert
wc2
.
mountpoint
==
wc
.
mountpoint
assert
wc2
.
mountpoint
==
wc
.
mountpoint
...
@@ -93,5 +96,29 @@ def test_join_autostart():
...
@@ -93,5 +96,29 @@ def test_join_autostart():
wc
=
wcfs
.
join
(
zurl
,
autostart
=
True
)
wc
=
wcfs
.
join
(
zurl
,
autostart
=
True
)
assert
wc
.
mountpoint
==
testmntpt
assert
wc
.
mountpoint
==
testmntpt
assert
readfile
(
wc
.
mountpoint
+
"/.wcfs"
)
==
zurl
assert
readfile
(
wc
.
mountpoint
+
"/.wcfs"
)
==
zurl
assert
os
.
path
.
isdir
(
wc
.
mountpoint
+
"/bigfile"
)
wc
.
close
()
wc
.
close
()
# XXX parametrize zblk0, zblk1
# XXX select !wcfs mode so that we prepare data through !wcfs path.
def
_test_bigfile_empty
():
root
=
testdb
.
dbopen
()
root
[
'zfile'
]
=
f
=
ZBigFile
(
blksize
)
transaction
.
commit
()
root
[
'aaa'
]
=
'bbb'
transaction
.
commit
()
wc
=
wcfs
.
join
(
testzurl
,
autostart
=
True
)
os
.
mkdir
(
"%s/bigfile/%s"
%
(
wc
.
mountpoint
,
f
.
_p_oid
.
encode
(
'hex'
)))
# XXX size(head/data) = 0
# XXX mtime(head/data) ~= last txn that changed bigdile
# XXX head/at = last txn of whole db
# XXX non-BigFile - rejected
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