Add rollback queue, like commit queue.
This commit is contained in:
parent
8c854f3b6a
commit
0a984117c5
2 changed files with 26 additions and 6 deletions
|
@ -1033,16 +1033,22 @@ class Photo(ObjectBase):
|
|||
|
||||
if new_path.normcase == old_path.normcase:
|
||||
# If they are equivalent but differently cased, just rename.
|
||||
action = os.rename
|
||||
args = [old_path.absolute_path, new_path.absolute_path]
|
||||
self.photodb.on_commit_queue.append({
|
||||
'action': os.rename,
|
||||
'args': [old_path.absolute_path, new_path.absolute_path],
|
||||
})
|
||||
else:
|
||||
# Delete the original, leaving only the new copy / hardlink.
|
||||
action = os.remove
|
||||
args = [old_path.absolute_path]
|
||||
self.photodb.on_commit_queue.append({
|
||||
'action': os.remove,
|
||||
'args': [old_path.absolute_path],
|
||||
})
|
||||
self.photodb.on_rollback_queue.append({
|
||||
'action': os.remove,
|
||||
'args': [new_path.absolute_path],
|
||||
})
|
||||
|
||||
self._uncache()
|
||||
queue_action = {'action': action, 'args': args}
|
||||
self.photodb.on_commit_queue.append(queue_action)
|
||||
|
||||
self.__reinit__()
|
||||
|
||||
|
|
|
@ -671,6 +671,7 @@ class PDBSQLMixin:
|
|||
def __init__(self):
|
||||
super().__init__()
|
||||
self.on_commit_queue = []
|
||||
self.on_rollback_queue = []
|
||||
self.savepoints = []
|
||||
|
||||
def assert_table_exists(self, table):
|
||||
|
@ -689,6 +690,7 @@ class PDBSQLMixin:
|
|||
args = task.get('args', [])
|
||||
kwargs = task.get('kwargs', {})
|
||||
task['action'](*args, **kwargs)
|
||||
|
||||
self.savepoints.clear()
|
||||
self.sql.commit()
|
||||
|
||||
|
@ -739,6 +741,17 @@ class PDBSQLMixin:
|
|||
self.log.debug('Nothing to roll back.')
|
||||
return
|
||||
|
||||
while len(self.on_rollback_queue) > 0:
|
||||
task = self.on_rollback_queue.pop(-1)
|
||||
if task == savepoint:
|
||||
break
|
||||
if isinstance(task, str):
|
||||
# Intermediate savepoints.
|
||||
continue
|
||||
args = task.get('args', [])
|
||||
kwargs = task.get('kwargs', {})
|
||||
task['action'](*args, **kwargs)
|
||||
|
||||
if savepoint is not None:
|
||||
self.log.debug('Rolling back to %s', savepoint)
|
||||
self.sql_execute(f'ROLLBACK TO "{savepoint}"')
|
||||
|
@ -761,6 +774,7 @@ class PDBSQLMixin:
|
|||
self.sql.execute(query)
|
||||
self.savepoints.append(savepoint_id)
|
||||
self.on_commit_queue.append(savepoint_id)
|
||||
self.on_rollback_queue.append(savepoint_id)
|
||||
return savepoint_id
|
||||
|
||||
def sql_delete(self, table, pairs):
|
||||
|
|
Loading…
Reference in a new issue