Commit 83fe64bf authored by Julien Muchembled's avatar Julien Muchembled

storage: fix pruning of data when deleting partial transactions during verification

parent daa83cb4
...@@ -562,14 +562,13 @@ class MySQLDatabaseManager(DatabaseManager): ...@@ -562,14 +562,13 @@ class MySQLDatabaseManager(DatabaseManager):
getPartition = self._getPartition getPartition = self._getPartition
q = self.query q = self.query
sql = " FROM tobj WHERE tid=%d" % tid sql = " FROM tobj WHERE tid=%d" % tid
data_id_list = [x for x, in q("SELECT data_id" + sql) if x] data_id_set = {x for x, in q("SELECT data_id" + sql) if x}
self.releaseData(data_id_list) self.releaseData(data_id_set)
q("DELETE" + sql) q("DELETE" + sql)
q("""DELETE FROM ttrans WHERE tid = %d""" % tid) q("""DELETE FROM ttrans WHERE tid = %d""" % tid)
q("""DELETE FROM trans WHERE `partition` = %d AND tid = %d""" % q("""DELETE FROM trans WHERE `partition` = %d AND tid = %d""" %
(getPartition(tid), tid)) (getPartition(tid), tid))
# delete from obj using indexes # delete from obj using indexes
data_id_set = set()
for oid in oid_list: for oid in oid_list:
oid = u64(oid) oid = u64(oid)
sql = " FROM obj WHERE `partition`=%d AND oid=%d AND tid=%d" \ sql = " FROM obj WHERE `partition`=%d AND oid=%d AND tid=%d" \
......
...@@ -424,14 +424,13 @@ class SQLiteDatabaseManager(DatabaseManager): ...@@ -424,14 +424,13 @@ class SQLiteDatabaseManager(DatabaseManager):
getPartition = self._getPartition getPartition = self._getPartition
q = self.query q = self.query
sql = " FROM tobj WHERE tid=?" sql = " FROM tobj WHERE tid=?"
data_id_list = [x for x, in q("SELECT data_id" + sql, (tid,)) if x] data_id_set = {x for x, in q("SELECT data_id" + sql, (tid,)) if x}
self.releaseData(data_id_list) self.releaseData(data_id_set)
q("DELETE" + sql, (tid,)) q("DELETE" + sql, (tid,))
q("DELETE FROM ttrans WHERE tid=?", (tid,)) q("DELETE FROM ttrans WHERE tid=?", (tid,))
q("DELETE FROM trans WHERE partition=? AND tid=?", q("DELETE FROM trans WHERE partition=? AND tid=?",
(getPartition(tid), tid)) (getPartition(tid), tid))
# delete from obj using indexes # delete from obj using indexes
data_id_set = set()
for oid in oid_list: for oid in oid_list:
oid = u64(oid) oid = u64(oid)
sql = " FROM obj WHERE partition=? AND oid=? AND tid=?" sql = " FROM obj WHERE partition=? AND oid=? AND tid=?"
......
...@@ -438,6 +438,14 @@ class Test(NEOThreadedTest): ...@@ -438,6 +438,14 @@ class Test(NEOThreadedTest):
finally: finally:
cluster.stop() cluster.stop()
cluster.reset() cluster.reset()
di0 = s0.getDataLockInfo()
k, = (k for k, v in di0.iteritems() if v == 1)
di0[k] = 0 # r[2] = 'ok'
self.assertEqual(di0.values(), [0, 0, 0, 0, 0])
di1 = s1.getDataLockInfo()
k, = (k for k, v in di1.iteritems() if v == 1)
del di1[k] # x.value = 1
self.assertEqual(di1.values(), [0])
try: try:
cluster.start() cluster.start()
t, c = cluster.getTransaction() t, c = cluster.getTransaction()
...@@ -445,6 +453,8 @@ class Test(NEOThreadedTest): ...@@ -445,6 +453,8 @@ class Test(NEOThreadedTest):
self.assertEqual(r[0].value, 0) self.assertEqual(r[0].value, 0)
self.assertEqual(r[1].value, 0) self.assertEqual(r[1].value, 0)
self.assertEqual(r[2], 'ok') self.assertEqual(r[2], 'ok')
self.assertEqual(di0, s0.getDataLockInfo())
self.assertEqual(di1, s1.getDataLockInfo())
finally: finally:
cluster.stop() cluster.stop()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment