Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
neoppod
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
1
Issues
1
List
Boards
Labels
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
neoppod
Commits
be839e92
Commit
be839e92
authored
Dec 05, 2017
by
Julien Muchembled
4
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
storage: speed up replication by not getting object next_serial for nothing
parent
c25e68bc
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
42 additions
and
3 deletions
+42
-3
neo/storage/database/manager.py
neo/storage/database/manager.py
+14
-0
neo/storage/database/mysqldb.py
neo/storage/database/mysqldb.py
+15
-0
neo/storage/database/sqlite.py
neo/storage/database/sqlite.py
+11
-0
neo/storage/handlers/storage.py
neo/storage/handlers/storage.py
+2
-3
No files found.
neo/storage/database/manager.py
View file @
be839e92
...
@@ -435,6 +435,20 @@ class DatabaseManager(object):
...
@@ -435,6 +435,20 @@ class DatabaseManager(object):
compression
,
checksum
,
data
,
compression
,
checksum
,
data
,
None
if
data_serial
is
None
else
util
.
p64
(
data_serial
))
None
if
data_serial
is
None
else
util
.
p64
(
data_serial
))
@
fallback
def
_fetchObject
(
self
,
oid
,
tid
):
r
=
self
.
_getObject
(
oid
,
tid
)
if
r
:
return
r
[:
1
]
+
r
[
2
:]
def
fetchObject
(
self
,
oid
,
tid
):
u64
=
util
.
u64
r
=
self
.
_fetchObject
(
u64
(
oid
),
u64
(
tid
))
if
r
:
serial
,
compression
,
checksum
,
data
,
data_serial
=
r
return
(
util
.
p64
(
serial
),
compression
,
checksum
,
data
,
None
if
data_serial
is
None
else
util
.
p64
(
data_serial
))
@
contextmanager
@
contextmanager
def
replicated
(
self
,
offset
):
def
replicated
(
self
,
offset
):
readable_set
=
self
.
_readable_set
readable_set
=
self
.
_readable_set
...
...
neo/storage/database/mysqldb.py
View file @
be839e92
...
@@ -698,6 +698,21 @@ class MySQLDatabaseManager(DatabaseManager):
...
@@ -698,6 +698,21 @@ class MySQLDatabaseManager(DatabaseManager):
if
r
:
if
r
:
return
[(
p64
(
tid
),
length
or
0
)
for
tid
,
length
in
r
]
return
[(
p64
(
tid
),
length
or
0
)
for
tid
,
length
in
r
]
def
_fetchObject
(
self
,
oid
,
tid
):
r
=
self
.
query
(
'SELECT tid, compression, data.hash, value, value_tid'
' FROM obj FORCE INDEX(`partition`)'
' LEFT JOIN data ON (obj.data_id = data.id)'
' WHERE `partition` = %d AND oid = %d AND tid = %d'
%
(
self
.
_getReadablePartition
(
oid
),
oid
,
tid
))
if
r
:
r
=
r
[
0
]
compression
=
r
[
1
]
if
compression
and
compression
&
0x80
:
return
(
r
[
0
],
compression
&
0x7f
,
r
[
2
],
''
.
join
(
self
.
_bigData
(
data
)),
r
[
4
])
return
r
def
getReplicationObjectList
(
self
,
min_tid
,
max_tid
,
length
,
partition
,
def
getReplicationObjectList
(
self
,
min_tid
,
max_tid
,
length
,
partition
,
min_oid
):
min_oid
):
u64
=
util
.
u64
u64
=
util
.
u64
...
...
neo/storage/database/sqlite.py
View file @
be839e92
...
@@ -532,6 +532,17 @@ class SQLiteDatabaseManager(DatabaseManager):
...
@@ -532,6 +532,17 @@ class SQLiteDatabaseManager(DatabaseManager):
self
.
_getPackTID
(),
offset
,
length
))
self
.
_getPackTID
(),
offset
,
length
))
]
or
None
]
or
None
def
_fetchObject
(
self
,
oid
,
tid
):
for
serial
,
compression
,
checksum
,
data
,
value_serial
in
self
.
query
(
'SELECT tid, compression, data.hash, value, value_tid'
' FROM obj LEFT JOIN data ON obj.data_id = data.id'
' WHERE partition=? AND oid=? AND tid=?'
,
(
self
.
_getReadablePartition
(
oid
),
oid
,
tid
)):
if
checksum
:
checksum
=
str
(
checksum
)
data
=
str
(
data
)
return
serial
,
compression
,
checksum
,
data
,
value_serial
def
getReplicationObjectList
(
self
,
min_tid
,
max_tid
,
length
,
partition
,
def
getReplicationObjectList
(
self
,
min_tid
,
max_tid
,
length
,
partition
,
min_oid
):
min_oid
):
u64
=
util
.
u64
u64
=
util
.
u64
...
...
neo/storage/handlers/storage.py
View file @
be839e92
...
@@ -255,15 +255,14 @@ class StorageOperationHandler(EventHandler):
...
@@ -255,15 +255,14 @@ class StorageOperationHandler(EventHandler):
if
not
oid_set
:
if
not
oid_set
:
del
object_dict
[
serial
]
del
object_dict
[
serial
]
continue
continue
object
=
dm
.
get
Object
(
oid
,
serial
)
object
=
dm
.
fetch
Object
(
oid
,
serial
)
if
not
object
:
if
not
object
:
conn
.
send
(
Errors
.
ReplicationError
(
conn
.
send
(
Errors
.
ReplicationError
(
"partition %u dropped or truncated"
"partition %u dropped or truncated"
%
partition
),
msg_id
)
%
partition
),
msg_id
)
return
return
# Same as in askFetchTransactions.
# Same as in askFetchTransactions.
conn
.
send
(
Packets
.
AddObject
(
oid
,
serial
,
*
object
[
2
:]),
conn
.
send
(
Packets
.
AddObject
(
oid
,
*
object
),
msg_id
)
msg_id
)
yield
conn
.
buffering
yield
conn
.
buffering
conn
.
send
(
Packets
.
AnswerFetchObjects
(
conn
.
send
(
Packets
.
AnswerFetchObjects
(
pack_tid
,
next_tid
,
next_oid
,
object_dict
),
msg_id
)
pack_tid
,
next_tid
,
next_oid
,
object_dict
),
msg_id
)
...
...
Julien Muchembled
@jm
mentioned in commit
9d14ea1b
·
Apr 05, 2019
mentioned in commit
9d14ea1b
mentioned in commit 9d14ea1b30c7499549255be970292e887c48c111
Toggle commit list
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