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
Labels
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
Kirill Smelkov
wendelin.core
Commits
3e488c7a
Commit
3e488c7a
authored
Jun 23, 2019
by
Kirill Smelkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
22cb4a88
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
34 additions
and
14 deletions
+34
-14
wcfs/wcfs_test.py
wcfs/wcfs_test.py
+34
-14
No files found.
wcfs/wcfs_test.py
View file @
3e488c7a
...
...
@@ -197,9 +197,9 @@ class tDB:
t
.
_wc_zheadfh
=
open
(
t
.
wc
.
mountpoint
+
"/.wcfs/zhead"
)
t
.
_wc_zheadv
=
[]
# when ZBigFile(s) blocks were last accessed via wcfs.
# this is updated only explicitly via ._blkaccess() .
t
.
_
accesse
d
=
{}
# ZBigFile -> {} blk -> head(when accessed)
# when
head/
ZBigFile(s) blocks were last accessed via wcfs.
# this is updated only explicitly via ._blk
head
access() .
t
.
_
blkAccessedAtHea
d
=
{}
# ZBigFile -> {} blk -> head(when accessed)
# tracked opened tFiles & tWatches
t
.
_files
=
set
()
...
...
@@ -298,11 +298,14 @@ class tDB:
# head/at = last txn of whole db
assert
t
.
_read
(
"head/at"
)
==
h
(
t
.
head
)
# _blkaccess marks head/zf[blk] accessed.
def
_blkaccess
(
t
,
zf
,
blk
):
# XXX locking?
zfAccessed
=
t
.
_accessed
.
setdefault
(
zf
,
{})
zfAccessed
[
blk
]
=
t
.
head
# _blkheadaccess marks head/zf[blk] accessed.
def
_blkheadaccess
(
t
,
zf
,
blk
):
# XXX locking needed? or we do everything seriall?
t
.
_headOfAccess
(
zf
)[
blk
]
=
t
.
head
# _headOfAccess returns {} describing when head/zf blocks were accessed.
def
_headOfAccess
(
t
,
zf
):
# {} blk -> head-when-accessed
return
t
.
_blkAccessedAtHead
.
setdefault
(
zf
,
{})
# _path returns path for object on wcfs.
# - str: wcfs root + obj;
...
...
@@ -409,11 +412,15 @@ class tFile:
t
.
f
.
close
()
# _blk returns memoryview of file[blk].
# when/if block memory is accessed, the user has to notify t
DB
with _blkaccess call.
# when/if block memory is accessed, the user has to notify t
File
with _blkaccess call.
def
_blk
(
t
,
blk
):
assert
blk
<=
t
.
_max_tracked_pages
return
memoryview
(
t
.
fmmap
[
blk
*
t
.
blksize
:(
blk
+
1
)
*
t
.
blksize
])
def
_blkaccess
(
t
,
blk
):
if
t
.
at
is
None
:
# notify tDB only for head/file access
t
.
tdb
.
_blkheadaccess
(
t
.
zf
,
blk
)
# cached returns [] with indicating whether a file block is cached or not.
# 1 - cached, 0 - not cached, fractional (0,1) - some pages of the block are cached some not.
def
cached
(
t
):
...
...
@@ -536,7 +543,7 @@ class tFile:
def
_
():
b
=
read_nogil
(
blkview
[
0
:
1
])
have_read
.
send
(
b
)
t
.
tdb
.
_blkaccess
(
t
.
zf
,
blk
)
t
.
_blkaccess
(
blk
)
go
(
_
)
_
,
_rx
=
select
(
ctx
.
done
().
recv
,
# 0
...
...
@@ -864,13 +871,15 @@ def watch(twlink, zf, at, pinok=None): # XXX -> tWatch ?
at_from
=
'(%s ->) '
%
t
.
hat
(
at_prev
)
print
(
'
\
n
C: setup watch f<%s> %s%s'
%
(
h
(
zf
.
_p_oid
),
at_from
,
t
.
hat
(
at
)))
headOfAccess
=
t
.
_headOfAccess
(
zf
)
pin_prev
=
{}
if
at_prev
is
not
None
:
assert
at_prev
<=
at
,
'TODO %s -> %s'
%
(
t
.
hat
(
at_prev
),
t
.
hat
(
at
))
pin_prev
=
t
.
_needPinAt
(
zf
,
at_prev
)
assert
w
.
pinned
==
pin_prev
# XXX & blkHeadAccessedRev > w.at
pin_prev
=
t
.
_needPinAt
(
zf
,
at_prev
)
# XXX & headOfBlkAccess(blk) > w.at
assert
w
.
pinned
==
pin_prev
pin
=
t
.
_needPinAt
(
zf
,
at
)
pin
=
t
.
_needPinAt
(
zf
,
at
)
# XXX & headOfBlkAccess > w.at
if
at_prev
!=
at
and
at_prev
is
not
None
:
print
(
'# pin@old: %s
\
n
# pin@new: %s'
%
(
t
.
hpin
(
pin_prev
),
t
.
hpin
(
pin
)))
...
...
@@ -886,10 +895,21 @@ def watch(twlink, zf, at, pinok=None): # XXX -> tWatch ?
# blk ∈ pin_prev, blk ∉ pin -> unpin to head
elif
blk
in
pin_prev
and
blk
not
in
pin
:
# blk ∈ pin_prev means blk was already accessed with rev > at_prev
assert
blk
in
headOfAccess
assert
t
.
_blkRevAt
(
blk
,
headOfAccess
[
blk
])
>
at_prev
# blk ∉ pin means XXX
assert
headOfAccess
[
blk
]
>=
t
.
_blkRevAt
(
blk
,
t
.
head
)
pin
[
blk
]
=
None
# @head
# blk ∈ pin_prev, blk ∈ pin -> if rev different: use pin
elif
blk
in
pin_prev
and
blk
in
pin
:
# XXX headOfAccess assert
assert
pin_prev
[
blk
]
<=
pin
[
blk
]
if
pin_prev
[
blk
]
==
pin
[
blk
]:
del
pin
[
blk
]
# would need to pin to what it is already pinned
...
...
@@ -908,7 +928,7 @@ def watch(twlink, zf, at, pinok=None): # XXX -> tWatch ?
twlink
.
_watch
(
zf
,
at
,
pinok
,
"ok"
)
w
.
at
=
at
assert
w
.
pinned
==
t
.
_needPinAt
(
zf
,
at
)
assert
w
.
pinned
==
t
.
_needPinAt
(
zf
,
at
)
# XXX & headOfBlkAccess
# stop_watch instructs wlink to stop watching the file.
...
...
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