Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
itminedu
synnefo
Commits
4c076f4e
Commit
4c076f4e
authored
Apr 22, 2013
by
Sofia Papagiannaki
Committed by
Georgios D. Tsoukalas
Jun 17, 2013
Browse files
pithos: enforce transaction isolation level
Refs: #3582 #3585
parent
1e72a824
Changes
4
Hide whitespace changes
Inline
Side-by-side
snf-pithos-backend/pithos/backends/lib/sqlalchemy/dbwrapper.py
View file @
4c076f4e
...
...
@@ -33,8 +33,7 @@
from
sqlalchemy
import
create_engine
#from sqlalchemy.event import listen
from
sqlalchemy.engine
import
Engine
from
sqlalchemy.pool
import
NullPool
,
QueuePool
from
sqlalchemy.pool
import
NullPool
from
sqlalchemy.interfaces
import
PoolListener
...
...
@@ -45,16 +44,20 @@ class DBWrapper(object):
if
db
.
startswith
(
'sqlite://'
):
class
ForeignKeysListener
(
PoolListener
):
def
connect
(
self
,
dbapi_con
,
con_record
):
db_cursor
=
dbapi_con
.
execute
(
'pragma foreign_keys=ON;'
)
db_cursor
=
dbapi_con
.
execute
(
'pragma case_sensitive_like=ON;'
)
self
.
engine
=
create_engine
(
db
,
connect_args
=
{
'check_same_thread'
:
False
},
poolclass
=
NullPool
,
listeners
=
[
ForeignKeysListener
()])
dbapi_con
.
execute
(
'pragma foreign_keys=ON;'
)
dbapi_con
.
execute
(
'pragma case_sensitive_like=ON;'
)
self
.
engine
=
create_engine
(
db
,
connect_args
=
{
'check_same_thread'
:
False
},
poolclass
=
NullPool
,
listeners
=
[
ForeignKeysListener
()],
isolation_level
=
'SERIALIZABLE'
)
#elif db.startswith('mysql://'):
# db = '%s?charset=utf8&use_unicode=0' %db
# self.engine = create_engine(db, convert_unicode=True)
else
:
#self.engine = create_engine(db, pool_size=0, max_overflow=-1)
self
.
engine
=
create_engine
(
db
,
poolclass
=
NullPool
)
self
.
engine
=
create_engine
(
db
,
poolclass
=
NullPool
,
isolation_level
=
'READ COMMITTED'
)
self
.
engine
.
echo
=
False
self
.
engine
.
echo_pool
=
False
self
.
conn
=
self
.
engine
.
connect
()
...
...
snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py
View file @
4c076f4e
...
...
@@ -234,14 +234,14 @@ class Node(DBWorker):
r
.
close
()
return
inserted_primary_key
def
node_lookup
(
self
,
path
):
def
node_lookup
(
self
,
path
,
for_update
=
False
):
"""Lookup the current node of the given path.
Return None if the path is not found.
"""
# Use LIKE for comparison to avoid MySQL problems with trailing spaces.
s
=
select
([
self
.
nodes
.
c
.
node
],
self
.
nodes
.
c
.
path
.
like
(
self
.
escape_like
(
path
),
escape
=
ESCAPE_CHAR
))
self
.
escape_like
(
path
),
escape
=
ESCAPE_CHAR
)
,
for_update
=
for_update
)
r
=
self
.
conn
.
execute
(
s
)
row
=
r
.
fetchone
()
r
.
close
()
...
...
snf-pithos-backend/pithos/backends/lib/sqlite/node.py
View file @
4c076f4e
...
...
@@ -203,9 +203,11 @@ class Node(DBWorker):
props
=
(
parent
,
path
)
return
self
.
execute
(
q
,
props
).
lastrowid
def
node_lookup
(
self
,
path
):
def
node_lookup
(
self
,
path
,
**
kwargs
):
"""Lookup the current node of the given path.
Return None if the path is not found.
kwargs is not used: it is passed for conformance
"""
q
=
"select node from nodes where path = ?"
...
...
snf-pithos-backend/pithos/backends/modular.py
View file @
4c076f4e
...
...
@@ -1217,7 +1217,7 @@ class ModularBackend(BaseBackend):
def
_lookup_container
(
self
,
account
,
container
):
path
=
'/'
.
join
((
account
,
container
))
node
=
self
.
node
.
node_lookup
(
path
)
node
=
self
.
node
.
node_lookup
(
path
,
for_update
=
True
)
if
node
is
None
:
raise
ItemNotExists
(
'Container does not exist'
)
return
path
,
node
...
...
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