Commit 0b8bfba3 authored by Julien Muchembled's avatar Julien Muchembled

storage: do not recreate tables when clearing database at exit

parent 1745d6ac
......@@ -81,7 +81,7 @@ class Application(object):
# ready is True when operational and got all informations
self.ready = False
self.dm.setup(reset=config.getReset())
self.dm.setup(self, reset=config.getReset())
self.loadConfiguration()
# force node uuid from command line argument, for testing purpose only
......@@ -400,6 +400,7 @@ class Application(object):
except PrimaryFailure:
pass
# clear database to avoid polluting the cluster at restart
self.dm.setup(reset=erase)
if erase:
self.dm.erase()
logging.info("Application has been asked to shut down")
sys.exit()
......@@ -34,17 +34,21 @@ class DatabaseManager(object):
"""Called during instanciation, to process database parameter."""
pass
def setup(self, reset = 0):
"""Set up a database
def setup(self, app, reset=0):
"""Set up a database, discarding existing data first if reset is True
"""
if reset:
self.erase()
self._setup(app)
def _setup(self, app):
"""To be overriden by the backend to set up a database
It must recover self._uncommitted_data from temporary object table.
_uncommitted_data is a dict containing refcounts to data of
write-locked objects, except in case of undo, where the refcount is
increased later, when the object is read-locked.
Keys are data ids and values are number of references.
If reset is true, existing data must be discarded and
self._uncommitted_data must be an empty dict.
"""
raise NotImplementedError
......
......@@ -135,13 +135,13 @@ class MySQLDatabaseManager(DatabaseManager):
"""Escape special characters in a string."""
return self.conn.escape_string(s)
def setup(self, reset = 0):
def erase(self):
self.query(
"DROP TABLE IF EXISTS config, pt, trans, obj, data, ttrans, tobj")
def _setup(self, app):
self._config.clear()
q = self.query
if reset:
q('DROP TABLE IF EXISTS config, pt, trans, obj, data, ttrans, tobj')
# The table "config" stores configuration parameters which affect the
# persistent data.
q("""CREATE TABLE IF NOT EXISTS config (
......
......@@ -101,14 +101,13 @@ class SQLiteDatabaseManager(DatabaseManager):
else:
query = property(lambda self: self.conn.execute)
def setup(self, reset = 0):
self._config.clear()
q = self.query
if reset:
def erase(self):
for t in 'config', 'pt', 'trans', 'obj', 'data', 'ttrans', 'tobj':
q('DROP TABLE IF EXISTS ' + t)
self.query('DROP TABLE IF EXISTS ' + t)
def _setup(self, app):
self._config.clear()
q = self.query
# The table "config" stores configuration parameters which affect the
# persistent data.
q("""CREATE TABLE IF NOT EXISTS config (
......
......@@ -53,7 +53,7 @@ class StorageDBTests(NeoUnitTestBase):
self._db = db = self.getDB(reset)
else:
if reset:
db.setup(reset)
db.setup(None, reset)
else:
try:
n = db.getNumPartitions()
......
......@@ -31,7 +31,7 @@ class StorageMySQSLdbTests(StorageDBTests):
# db manager
database = '%s@%s' % (NEO_SQL_USER, NEO_SQL_DATABASE)
db = MySQLDatabaseManager(database, 0)
db.setup(reset)
db.setup(None, reset)
return db
def test_MySQLDatabaseManagerInit(self):
......
......@@ -22,7 +22,7 @@ class StorageSQLiteTests(StorageDBTests):
def getDB(self, reset=0):
db = SQLiteDatabaseManager(':memory:', 0)
db.setup(reset)
db.setup(None, reset)
return db
del StorageDBTests
......
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