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
Kirill Smelkov
ZODB
Commits
48776c19
Commit
48776c19
authored
Dec 03, 2002
by
Jeremy Hylton
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Sync TmpStore between ZODB3 and ZODB4
parent
ca108917
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
77 additions
and
61 deletions
+77
-61
src/ZODB/TmpStore.py
src/ZODB/TmpStore.py
+77
-61
No files found.
src/ZODB/TmpStore.py
View file @
48776c19
...
@@ -12,97 +12,113 @@
...
@@ -12,97 +12,113 @@
#
#
##############################################################################
##############################################################################
import
POSException
from
ZODB
import
POSException
from
utils
import
p64
,
u
64
from
ZODB.utils
import
p64
,
u64
,
z
64
class
TmpStore
:
import
tempfile
_transaction
=
_isCommitting
=
None
def
__init__
(
self
,
base_version
,
file
=
None
):
if
file
is
None
:
import
tempfile
file
=
tempfile
.
TemporaryFile
()
self
.
_file
=
file
class
TmpStore
:
self
.
_index
=
{}
"""A storage to support subtransactions."""
self
.
_pos
=
self
.
_tpos
=
0
self
.
_bver
=
base_version
_bver
=
''
self
.
_tindex
=
[]
self
.
_db
=
None
def
__init__
(
self
,
base_version
):
self
.
_creating
=
[]
self
.
_transaction
=
None
if
base_version
:
def
__del__
(
self
):
self
.
close
()
self
.
_bver
=
base_version
self
.
_file
=
tempfile
.
TemporaryFile
()
# _pos: current file position
# _tpos: file position at last commit point
self
.
_pos
=
self
.
_tpos
=
0
# _index: map oid to pos of last committed version
self
.
_index
=
{}
# _tindex: map oid to pos for new updates
self
.
_tindex
=
{}
self
.
_db
=
None
self
.
_creating
=
[]
def
__del__
(
self
):
# XXX Is this necessary?
self
.
_file
.
close
()
def
close
(
self
):
def
close
(
self
):
self
.
_file
.
close
()
self
.
_file
.
close
()
del
self
.
_file
del
self
.
_index
del
self
.
_db
def
getName
(
self
):
return
self
.
_db
.
getName
()
def
getName
(
self
):
def
getSize
(
self
):
return
self
.
_pos
return
self
.
_db
.
getName
()
def
getSize
(
self
):
return
self
.
_pos
def
load
(
self
,
oid
,
version
):
def
load
(
self
,
oid
,
version
):
#if version is not self: raise KeyError, oid
pos
=
self
.
_index
.
get
(
oid
)
pos
=
self
.
_index
.
get
(
oid
,
None
)
if
pos
is
None
:
if
pos
is
None
:
return
self
.
_storage
.
load
(
oid
,
self
.
_bver
)
return
self
.
_storage
.
load
(
oid
,
self
.
_bver
)
file
=
self
.
_file
self
.
_file
.
seek
(
pos
)
file
.
seek
(
pos
)
h
=
self
.
_file
.
read
(
24
)
h
=
file
.
read
(
24
)
if
h
[:
8
]
!=
oid
:
if
h
[:
8
]
!=
oid
:
raise
POSException
.
StorageSystemError
,
'Bad temporary storage'
raise
POSException
.
StorageSystemError
(
'Bad temporary storage'
)
return
file
.
read
(
u64
(
h
[
16
:])),
h
[
8
:
16
]
size
=
u64
(
h
[
16
:])
serial
=
h
[
8
:
16
]
return
self
.
_file
.
read
(
size
),
serial
# XXX clarify difference between self._storage & self._db._storage
def
modifiedInVersion
(
self
,
oid
):
def
modifiedInVersion
(
self
,
oid
):
if
self
.
_index
.
has_key
(
oid
):
return
1
if
self
.
_index
.
has_key
(
oid
):
return
self
.
_bver
return
self
.
_db
.
_storage
.
modifiedInVersion
(
oid
)
return
self
.
_db
.
_storage
.
modifiedInVersion
(
oid
)
def
new_oid
(
self
):
return
self
.
_db
.
_storage
.
new_oid
()
def
new_oid
(
self
):
return
self
.
_db
.
_storage
.
new_oid
()
def
registerDB
(
self
,
db
,
limit
):
def
registerDB
(
self
,
db
,
limit
):
self
.
_db
=
db
self
.
_db
=
db
self
.
_storage
=
db
.
_storage
self
.
_storage
=
db
.
_storage
def
store
(
self
,
oid
,
serial
,
data
,
version
,
transaction
):
def
store
(
self
,
oid
,
serial
,
data
,
version
,
transaction
):
if
transaction
is
not
self
.
_transaction
:
if
transaction
is
not
self
.
_transaction
:
raise
POSException
.
StorageTransactionError
(
self
,
transaction
)
raise
POSException
.
StorageTransactionError
(
self
,
transaction
)
file
=
self
.
_file
self
.
_file
.
seek
(
self
.
_pos
)
pos
=
self
.
_pos
l
=
len
(
data
)
file
.
seek
(
pos
)
l
=
len
(
data
)
if
serial
is
None
:
if
serial
is
None
:
serial
=
'
\
0
\
0
\
0
\
0
\
0
\
0
\
0
\
0
'
serial
=
z64
file
.
write
(
oid
+
serial
+
p64
(
l
))
self
.
_file
.
write
(
oid
+
serial
+
p64
(
l
))
file
.
write
(
data
)
self
.
_
file
.
write
(
data
)
self
.
_tindex
.
append
((
oid
,
pos
))
self
.
_tindex
[
oid
]
=
self
.
_pos
self
.
_pos
=
pos
+
l
+
24
self
.
_pos
+=
l
+
24
return
serial
return
serial
def
tpc_abort
(
self
,
transaction
):
def
tpc_abort
(
self
,
transaction
):
if
transaction
is
not
self
.
_transaction
:
return
if
transaction
is
not
self
.
_transaction
:
del
self
.
_tindex
[:]
return
self
.
_transaction
=
None
self
.
_tindex
.
clear
()
self
.
_pos
=
self
.
_tpos
self
.
_transaction
=
None
self
.
_pos
=
self
.
_tpos
def
tpc_begin
(
self
,
transaction
):
def
tpc_begin
(
self
,
transaction
):
if
self
.
_transaction
is
transaction
:
return
if
self
.
_transaction
is
transaction
:
self
.
_transaction
=
transaction
return
del
self
.
_tindex
[:]
# Just to be sure!
self
.
_transaction
=
transaction
self
.
_pos
=
self
.
_tpos
self
.
_tindex
.
clear
()
# Just to be sure!
self
.
_pos
=
self
.
_tpos
def
tpc_vote
(
self
,
transaction
):
pass
def
tpc_vote
(
self
,
transaction
):
pass
def
tpc_finish
(
self
,
transaction
,
f
=
None
):
def
tpc_finish
(
self
,
transaction
,
f
=
None
):
if
transaction
is
not
self
.
_transaction
:
return
if
transaction
is
not
self
.
_transaction
:
if
f
is
not
None
:
f
()
return
i
ndex
=
self
.
_index
i
f
f
is
not
None
:
tindex
=
self
.
_tindex
f
()
for
oid
,
pos
in
tindex
:
index
[
oid
]
=
pos
self
.
_index
.
update
(
self
.
_tindex
)
del
tindex
[:]
self
.
_tindex
.
clear
()
self
.
_tpos
=
self
.
_pos
self
.
_tpos
=
self
.
_pos
def
undoLog
(
self
,
first
,
last
,
filter
=
None
):
return
()
def
undoLog
(
self
,
first
,
last
,
filter
=
None
):
return
()
def
versionEmpty
(
self
,
version
):
def
versionEmpty
(
self
,
version
):
if
version
is
self
:
return
len
(
self
.
_index
)
# XXX what is this supposed to do?
if
version
==
self
.
_bver
:
return
len
(
self
.
_index
)
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