Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
ZODB
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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
ZODB
Commits
b0afc498
Commit
b0afc498
authored
Feb 05, 2010
by
Jim Fulton
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Finished converting (almost all) lock calls to use the with statement
and colapsed some undo methods.
parent
233cea39
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
22 additions
and
69 deletions
+22
-69
src/ZODB/FileStorage/FileStorage.py
src/ZODB/FileStorage/FileStorage.py
+22
-69
No files found.
src/ZODB/FileStorage/FileStorage.py
View file @
b0afc498
...
@@ -16,10 +16,9 @@
...
@@ -16,10 +16,9 @@
from
__future__
import
with_statement
from
__future__
import
with_statement
from
cPickle
import
Pickler
,
Unpickler
,
loads
from
cPickle
import
Pickler
,
loads
from
persistent.TimeStamp
import
TimeStamp
from
persistent.TimeStamp
import
TimeStamp
from
struct
import
pack
,
unpack
from
struct
import
pack
,
unpack
from
types
import
StringType
from
zc.lockfile
import
LockFile
from
zc.lockfile
import
LockFile
from
ZODB.FileStorage.format
import
CorruptedError
,
CorruptedDataError
from
ZODB.FileStorage.format
import
CorruptedError
,
CorruptedDataError
from
ZODB.FileStorage.format
import
FileStorageFormatter
,
DataHeader
from
ZODB.FileStorage.format
import
FileStorageFormatter
,
DataHeader
...
@@ -28,7 +27,6 @@ from ZODB.FileStorage.format import TxnHeader, DATA_HDR, DATA_HDR_LEN
...
@@ -28,7 +27,6 @@ from ZODB.FileStorage.format import TxnHeader, DATA_HDR, DATA_HDR_LEN
from
ZODB.FileStorage.fspack
import
FileStoragePacker
from
ZODB.FileStorage.fspack
import
FileStoragePacker
from
ZODB.fsIndex
import
fsIndex
from
ZODB.fsIndex
import
fsIndex
from
ZODB
import
BaseStorage
,
ConflictResolution
,
POSException
from
ZODB
import
BaseStorage
,
ConflictResolution
,
POSException
from
ZODB.loglevels
import
BLATHER
from
ZODB.POSException
import
UndoError
,
POSKeyError
,
MultipleUndoErrors
from
ZODB.POSException
import
UndoError
,
POSKeyError
,
MultipleUndoErrors
from
ZODB.utils
import
p64
,
u64
,
z64
from
ZODB.utils
import
p64
,
u64
,
z64
...
@@ -38,7 +36,6 @@ import contextlib
...
@@ -38,7 +36,6 @@ import contextlib
import
errno
import
errno
import
logging
import
logging
import
os
import
os
import
sys
import
threading
import
threading
import
time
import
time
import
ZODB.blob
import
ZODB.blob
...
@@ -427,8 +424,7 @@ class FileStorage(
...
@@ -427,8 +424,7 @@ class FileStorage(
raise
POSKeyError
(
oid
)
raise
POSKeyError
(
oid
)
def
loadSerial
(
self
,
oid
,
serial
):
def
loadSerial
(
self
,
oid
,
serial
):
self
.
_lock_acquire
()
with
self
.
_lock
:
try
:
pos
=
self
.
_lookup_pos
(
oid
)
pos
=
self
.
_lookup_pos
(
oid
)
while
1
:
while
1
:
h
=
self
.
_read_data_header
(
pos
,
oid
)
h
=
self
.
_read_data_header
(
pos
,
oid
)
...
@@ -441,8 +437,6 @@ class FileStorage(
...
@@ -441,8 +437,6 @@ class FileStorage(
return
self
.
_file
.
read
(
h
.
plen
)
return
self
.
_file
.
read
(
h
.
plen
)
else
:
else
:
return
self
.
_loadBack_impl
(
oid
,
h
.
back
)[
0
]
return
self
.
_loadBack_impl
(
oid
,
h
.
back
)[
0
]
finally
:
self
.
_lock_release
()
def
loadBefore
(
self
,
oid
,
tid
):
def
loadBefore
(
self
,
oid
,
tid
):
with
self
.
_files
.
get
()
as
_file
:
with
self
.
_files
.
get
()
as
_file
:
...
@@ -471,8 +465,7 @@ class FileStorage(
...
@@ -471,8 +465,7 @@ class FileStorage(
raise
POSException
.
StorageTransactionError
(
self
,
transaction
)
raise
POSException
.
StorageTransactionError
(
self
,
transaction
)
assert
not
version
assert
not
version
self
.
_lock_acquire
()
with
self
.
_lock
:
try
:
if
oid
>
self
.
_oid
:
if
oid
>
self
.
_oid
:
self
.
set_max_oid
(
oid
)
self
.
set_max_oid
(
oid
)
old
=
self
.
_index_get
(
oid
,
0
)
old
=
self
.
_index_get
(
oid
,
0
)
...
@@ -510,17 +503,13 @@ class FileStorage(
...
@@ -510,17 +503,13 @@ class FileStorage(
else
:
else
:
return
self
.
_tid
return
self
.
_tid
finally
:
self
.
_lock_release
()
def
deleteObject
(
self
,
oid
,
oldserial
,
transaction
):
def
deleteObject
(
self
,
oid
,
oldserial
,
transaction
):
if
self
.
_is_read_only
:
if
self
.
_is_read_only
:
raise
POSException
.
ReadOnlyError
()
raise
POSException
.
ReadOnlyError
()
if
transaction
is
not
self
.
_transaction
:
if
transaction
is
not
self
.
_transaction
:
raise
POSException
.
StorageTransactionError
(
self
,
transaction
)
raise
POSException
.
StorageTransactionError
(
self
,
transaction
)
self
.
_lock_acquire
()
with
self
.
_lock
:
try
:
old
=
self
.
_index_get
(
oid
,
0
)
old
=
self
.
_index_get
(
oid
,
0
)
if
not
old
:
if
not
old
:
raise
POSException
.
POSKeyError
(
oid
)
raise
POSException
.
POSKeyError
(
oid
)
...
@@ -543,9 +532,6 @@ class FileStorage(
...
@@ -543,9 +532,6 @@ class FileStorage(
raise
FileStorageQuotaError
(
raise
FileStorageQuotaError
(
"The storage quota has been exceeded."
)
"The storage quota has been exceeded."
)
finally
:
self
.
_lock_release
()
def
_data_find
(
self
,
tpos
,
oid
,
data
):
def
_data_find
(
self
,
tpos
,
oid
,
data
):
# Return backpointer for oid. Must call with the lock held.
# Return backpointer for oid. Must call with the lock held.
# This is a file offset to oid's data record if found, else 0.
# This is a file offset to oid's data record if found, else 0.
...
@@ -617,8 +603,7 @@ class FileStorage(
...
@@ -617,8 +603,7 @@ class FileStorage(
if
version
:
if
version
:
raise
TypeError
(
"Versions are no-longer supported"
)
raise
TypeError
(
"Versions are no-longer supported"
)
self
.
_lock_acquire
()
with
self
.
_lock
:
try
:
if
oid
>
self
.
_oid
:
if
oid
>
self
.
_oid
:
self
.
set_max_oid
(
oid
)
self
.
set_max_oid
(
oid
)
prev_pos
=
0
prev_pos
=
0
...
@@ -654,8 +639,6 @@ class FileStorage(
...
@@ -654,8 +639,6 @@ class FileStorage(
self
.
_tfile
.
write
(
z64
)
self
.
_tfile
.
write
(
z64
)
else
:
else
:
self
.
_tfile
.
write
(
data
)
self
.
_tfile
.
write
(
data
)
finally
:
self
.
_lock_release
()
def
supportsUndo
(
self
):
def
supportsUndo
(
self
):
return
1
return
1
...
@@ -679,10 +662,8 @@ class FileStorage(
...
@@ -679,10 +662,8 @@ class FileStorage(
if
len
(
e
)
>
65535
:
if
len
(
e
)
>
65535
:
raise
FileStorageError
(
'too much extension data'
)
raise
FileStorageError
(
'too much extension data'
)
def
tpc_vote
(
self
,
transaction
):
def
tpc_vote
(
self
,
transaction
):
self
.
_lock_acquire
()
with
self
.
_lock
:
try
:
if
transaction
is
not
self
.
_transaction
:
if
transaction
is
not
self
.
_transaction
:
raise
POSException
.
StorageTransactionError
(
raise
POSException
.
StorageTransactionError
(
"tpc_vote called with wrong transaction"
)
"tpc_vote called with wrong transaction"
)
...
@@ -711,8 +692,6 @@ class FileStorage(
...
@@ -711,8 +692,6 @@ class FileStorage(
self
.
_file
.
truncate
(
self
.
_pos
)
self
.
_file
.
truncate
(
self
.
_pos
)
raise
raise
self
.
_nextpos
=
self
.
_pos
+
(
tl
+
8
)
self
.
_nextpos
=
self
.
_pos
+
(
tl
+
8
)
finally
:
self
.
_lock_release
()
def
tpc_finish
(
self
,
transaction
,
f
=
None
):
def
tpc_finish
(
self
,
transaction
,
f
=
None
):
with
self
.
_files
.
write_lock
():
with
self
.
_files
.
write_lock
():
...
@@ -794,16 +773,13 @@ class FileStorage(
...
@@ -794,16 +773,13 @@ class FileStorage(
return
h
.
tid
,
pos
,
data
return
h
.
tid
,
pos
,
data
def
getTid
(
self
,
oid
):
def
getTid
(
self
,
oid
):
self
.
_lock_acquire
()
with
self
.
_lock
:
try
:
pos
=
self
.
_lookup_pos
(
oid
)
pos
=
self
.
_lookup_pos
(
oid
)
h
=
self
.
_read_data_header
(
pos
,
oid
)
h
=
self
.
_read_data_header
(
pos
,
oid
)
if
h
.
plen
==
0
and
h
.
back
==
0
:
if
h
.
plen
==
0
and
h
.
back
==
0
:
# Undone creation
# Undone creation
raise
POSKeyError
(
oid
)
raise
POSKeyError
(
oid
)
return
h
.
tid
return
h
.
tid
finally
:
self
.
_lock_release
()
def
_transactionalUndoRecord
(
self
,
oid
,
pos
,
tid
,
pre
):
def
_transactionalUndoRecord
(
self
,
oid
,
pos
,
tid
,
pre
):
"""Get the undo information for a data record
"""Get the undo information for a data record
...
@@ -887,8 +863,7 @@ class FileStorage(
...
@@ -887,8 +863,7 @@ class FileStorage(
# the normalization code was incorrect for years (used +1
# the normalization code was incorrect for years (used +1
# instead -- off by 1), until ZODB 3.4.
# instead -- off by 1), until ZODB 3.4.
last
=
first
-
last
last
=
first
-
last
self
.
_lock_acquire
()
with
self
.
_lock
:
try
:
if
self
.
_pack_is_in_progress
:
if
self
.
_pack_is_in_progress
:
raise
UndoError
(
raise
UndoError
(
'Undo is currently disabled for database maintenance.<p>'
)
'Undo is currently disabled for database maintenance.<p>'
)
...
@@ -905,8 +880,6 @@ class FileStorage(
...
@@ -905,8 +880,6 @@ class FileStorage(
self
.
_lock_release
()
self
.
_lock_release
()
self
.
_lock_acquire
()
self
.
_lock_acquire
()
return
us
.
results
return
us
.
results
finally
:
self
.
_lock_release
()
def
undo
(
self
,
transaction_id
,
transaction
):
def
undo
(
self
,
transaction_id
,
transaction
):
"""Undo a transaction, given by transaction_id.
"""Undo a transaction, given by transaction_id.
...
@@ -925,20 +898,14 @@ class FileStorage(
...
@@ -925,20 +898,14 @@ class FileStorage(
if
transaction
is
not
self
.
_transaction
:
if
transaction
is
not
self
.
_transaction
:
raise
POSException
.
StorageTransactionError
(
self
,
transaction
)
raise
POSException
.
StorageTransactionError
(
self
,
transaction
)
self
.
_lock_acquire
()
with
self
.
_lock
:
try
:
# Find the right transaction to undo and call _txn_undo_write().
return
self
.
_txn_undo
(
transaction_id
)
tid
=
base64
.
decodestring
(
transaction_id
+
'
\
n
'
)
finally
:
assert
len
(
tid
)
==
8
self
.
_lock_release
()
tpos
=
self
.
_txn_find
(
tid
,
1
)
tindex
=
self
.
_txn_undo_write
(
tpos
)
def
_txn_undo
(
self
,
transaction_id
):
self
.
_tindex
.
update
(
tindex
)
# Find the right transaction to undo and call _txn_undo_write().
return
self
.
_tid
,
tindex
.
keys
()
tid
=
base64
.
decodestring
(
transaction_id
+
'
\
n
'
)
assert
len
(
tid
)
==
8
tpos
=
self
.
_txn_find
(
tid
,
1
)
tindex
=
self
.
_txn_undo_write
(
tpos
)
self
.
_tindex
.
update
(
tindex
)
return
self
.
_tid
,
tindex
.
keys
()
def
_txn_find
(
self
,
tid
,
stop_at_pack
):
def
_txn_find
(
self
,
tid
,
stop_at_pack
):
pos
=
self
.
_pos
pos
=
self
.
_pos
...
@@ -1027,8 +994,7 @@ class FileStorage(
...
@@ -1027,8 +994,7 @@ class FileStorage(
return
tindex
return
tindex
def
history
(
self
,
oid
,
size
=
1
,
filter
=
None
):
def
history
(
self
,
oid
,
size
=
1
,
filter
=
None
):
self
.
_lock_acquire
()
with
self
.
_lock
:
try
:
r
=
[]
r
=
[]
pos
=
self
.
_lookup_pos
(
oid
)
pos
=
self
.
_lookup_pos
(
oid
)
...
@@ -1056,8 +1022,6 @@ class FileStorage(
...
@@ -1056,8 +1022,6 @@ class FileStorage(
pos
=
h
.
prev
pos
=
h
.
prev
else
:
else
:
return
r
return
r
finally
:
self
.
_lock_release
()
def
_redundant_pack
(
self
,
file
,
pos
):
def
_redundant_pack
(
self
,
file
,
pos
):
assert
pos
>
8
,
pos
assert
pos
>
8
,
pos
...
@@ -1097,13 +1061,10 @@ class FileStorage(
...
@@ -1097,13 +1061,10 @@ class FileStorage(
if
not
self
.
_index
:
if
not
self
.
_index
:
return
return
self
.
_lock_acquire
()
with
self
.
_lock
:
try
:
if
self
.
_pack_is_in_progress
:
if
self
.
_pack_is_in_progress
:
raise
FileStorageError
(
'Already packing'
)
raise
FileStorageError
(
'Already packing'
)
self
.
_pack_is_in_progress
=
True
self
.
_pack_is_in_progress
=
True
finally
:
self
.
_lock_release
()
if
gc
is
None
:
if
gc
is
None
:
gc
=
self
.
_pack_gc
gc
=
self
.
_pack_gc
...
@@ -1154,18 +1115,14 @@ class FileStorage(
...
@@ -1154,18 +1115,14 @@ class FileStorage(
finally
:
finally
:
if
have_commit_lock
:
if
have_commit_lock
:
self
.
_commit_lock_release
()
self
.
_commit_lock_release
()
self
.
_lock_acquire
()
with
self
.
_lock
:
self
.
_pack_is_in_progress
=
False
self
.
_pack_is_in_progress
=
False
self
.
_lock_release
()
if
not
self
.
pack_keep_old
:
if
not
self
.
pack_keep_old
:
os
.
remove
(
oldpath
)
os
.
remove
(
oldpath
)
self
.
_lock_acquire
()
with
self
.
_lock
:
try
:
self
.
_save_index
()
self
.
_save_index
()
finally
:
self
.
_lock_release
()
def
_remove_blob_files_tagged_for_removal_during_pack
(
self
):
def
_remove_blob_files_tagged_for_removal_during_pack
(
self
):
lblob_dir
=
len
(
self
.
blob_dir
)
lblob_dir
=
len
(
self
.
blob_dir
)
...
@@ -1277,8 +1234,7 @@ class FileStorage(
...
@@ -1277,8 +1234,7 @@ class FileStorage(
file
=
self
.
_file
file
=
self
.
_file
seek
=
file
.
seek
seek
=
file
.
seek
read
=
file
.
read
read
=
file
.
read
self
.
_lock_acquire
()
with
self
.
_lock
:
try
:
pos
=
self
.
_pos
pos
=
self
.
_pos
while
count
>
0
and
pos
>
4
:
while
count
>
0
and
pos
>
4
:
count
-=
1
count
-=
1
...
@@ -1288,9 +1244,6 @@ class FileStorage(
...
@@ -1288,9 +1244,6 @@ class FileStorage(
seek
(
0
)
seek
(
0
)
return
[(
trans
.
tid
,
[
r
.
oid
for
r
in
trans
])
return
[(
trans
.
tid
,
[
r
.
oid
for
r
in
trans
])
for
trans
in
FileIterator
(
self
.
_file_name
,
pos
=
pos
)]
for
trans
in
FileIterator
(
self
.
_file_name
,
pos
=
pos
)]
finally
:
self
.
_lock_release
()
def
lastTid
(
self
,
oid
):
def
lastTid
(
self
,
oid
):
"""Return last serialno committed for object oid.
"""Return last serialno committed for object oid.
...
...
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