Reuse a cursor instead of a conn.execute for better performance

Basically the same thing as https://review.openstack.org/#/c/109694/
but over in the account backend.

Change-Id: I9255f3145818da3adafc16d3bcf159608a78fe51
This commit is contained in:
paul luse 2014-07-25 16:34:39 -07:00
parent 6c256c5057
commit 1cd14daadb

View File

@ -453,6 +453,7 @@ class AccountBroker(DatabaseBroker):
"""
def _really_merge_items(conn):
max_rowid = -1
curs = conn.cursor()
for rec in item_list:
record = [rec['name'], rec['put_timestamp'],
rec['delete_timestamp'], rec['object_count'],
@ -466,9 +467,9 @@ class AccountBroker(DatabaseBroker):
'''
if self.get_db_version(conn) >= 1:
query += ' AND deleted IN (0, 1)'
curs = conn.execute(query, (rec['name'],))
curs.row_factory = None
row = curs.fetchone()
curs_row = curs.execute(query, (rec['name'],))
curs_row.row_factory = None
row = curs_row.fetchone()
if row:
row = list(row)
for i in xrange(5):
@ -484,11 +485,11 @@ class AccountBroker(DatabaseBroker):
record[5] = 1
else:
record[5] = 0
conn.execute('''
curs.execute('''
DELETE FROM container WHERE name = ? AND
deleted IN (0, 1)
''', (record[0],))
conn.execute('''
curs.execute('''
INSERT INTO container (name, put_timestamp,
delete_timestamp, object_count, bytes_used,
deleted, storage_policy_index)
@ -498,12 +499,12 @@ class AccountBroker(DatabaseBroker):
max_rowid = max(max_rowid, rec['ROWID'])
if source:
try:
conn.execute('''
curs.execute('''
INSERT INTO incoming_sync (sync_point, remote_id)
VALUES (?, ?)
''', (max_rowid, source))
except sqlite3.IntegrityError:
conn.execute('''
curs.execute('''
UPDATE incoming_sync
SET sync_point=max(?, sync_point)
WHERE remote_id=?