Reset primary key back to 1 after deleting all revisions
This PS resets the primary key for each table in the database back to 1 after deleting all revisions (i.e. DELETE /revisions) which effectively purges all the data in the database. Change-Id: Id64e01ea85d7098e261a56cf9eacdcce716b1f48
This commit is contained in:
parent
8cc63164d2
commit
d941b09ef0
|
@ -607,15 +607,28 @@ def revision_get_all(session=None, **filters):
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def revision_delete_all(session=None):
|
def revision_delete_all():
|
||||||
"""Delete all revisions.
|
"""Delete all revisions and resets primary key index back to 1 for each
|
||||||
|
table in the database.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
Effectively purges all data from database.
|
||||||
|
|
||||||
:param session: Database session object.
|
:param session: Database session object.
|
||||||
:returns: None
|
:returns: None
|
||||||
"""
|
"""
|
||||||
session = session or get_session()
|
engine = get_engine()
|
||||||
session.query(models.Revision)\
|
if engine.name == 'postgresql':
|
||||||
.delete(synchronize_session=False)
|
# NOTE(fmontei): While cascade should delete all data from all tables,
|
||||||
|
# we also need to reset the index to 1 for each table.
|
||||||
|
for table in ['buckets', 'revisions', 'revision_tags', 'documents',
|
||||||
|
'validations']:
|
||||||
|
engine.execute(
|
||||||
|
text("TRUNCATE TABLE %s RESTART IDENTITY CASCADE;" % table)
|
||||||
|
.execution_options(autocommit=True))
|
||||||
|
else:
|
||||||
|
raw_query("DELETE FROM revisions;")
|
||||||
|
|
||||||
|
|
||||||
def _exclude_deleted_documents(documents):
|
def _exclude_deleted_documents(documents):
|
||||||
|
|
|
@ -132,8 +132,7 @@ class TestRevisions(base.TestDbBase):
|
||||||
all_revision_ids = []
|
all_revision_ids = []
|
||||||
|
|
||||||
for _ in range(3):
|
for _ in range(3):
|
||||||
document_payload = [base.DocumentFixture.get_minimal_fixture()
|
document_payload = [base.DocumentFixture.get_minimal_fixture()]
|
||||||
for _ in range(3)]
|
|
||||||
bucket_name = test_utils.rand_name('bucket')
|
bucket_name = test_utils.rand_name('bucket')
|
||||||
created_documents = self.create_documents(
|
created_documents = self.create_documents(
|
||||||
bucket_name, document_payload)
|
bucket_name, document_payload)
|
||||||
|
@ -156,6 +155,13 @@ class TestRevisions(base.TestDbBase):
|
||||||
self.assertRaisesRegex(errors.DocumentNotFound, error_re,
|
self.assertRaisesRegex(errors.DocumentNotFound, error_re,
|
||||||
self.show_document, **filters)
|
self.show_document, **filters)
|
||||||
|
|
||||||
|
# Validate that the revision/document ID was reset back to 1.
|
||||||
|
bucket_name = test_utils.rand_name('bucket')
|
||||||
|
created_documents = self.create_documents(
|
||||||
|
bucket_name, [base.DocumentFixture.get_minimal_fixture()])
|
||||||
|
self.assertEqual(1, created_documents[0]['revision_id'])
|
||||||
|
self.assertEqual(1, created_documents[0]['id'])
|
||||||
|
|
||||||
def test_revision_history_multiple_buckets(self):
|
def test_revision_history_multiple_buckets(self):
|
||||||
documents = base.DocumentFixture.get_minimal_fixture()
|
documents = base.DocumentFixture.get_minimal_fixture()
|
||||||
alt_documents = base.DocumentFixture.get_minimal_fixture()
|
alt_documents = base.DocumentFixture.get_minimal_fixture()
|
||||||
|
|
Loading…
Reference in New Issue