[Kimchi-devel] [PATCH] [Wok] Upgrade objectstore schema.
pvital at linux.vnet.ibm.com
pvital at linux.vnet.ibm.com
Mon Dec 14 13:45:54 UTC 2015
From: Paulo Vital <pvital at linux.vnet.ibm.com>
With the new structure of the objectstore changed in Wok 2.0.0, the schema of
the objectstore file (when used by any plugin) needs to be checked and, if
necessary, updated to reflect the new structure.
This patch adds to utils.py file some common methods to support the operations
in the plugin's objectstore files. These methods were moved from Kimchi plugin
since they will be used by other plugins to do the same.
Signed-off-by: Paulo Vital <pvital at linux.vnet.ibm.com>
---
src/wok/utils.py | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/src/wok/utils.py b/src/wok/utils.py
index 8c8973a..997adf3 100644
--- a/src/wok/utils.py
+++ b/src/wok/utils.py
@@ -26,6 +26,7 @@ import os
import psutil
import pwd
import re
+import sqlite3
import subprocess
import traceback
import xml.etree.ElementTree as ET
@@ -504,3 +505,47 @@ def convert_data_size(value, from_unit, to_unit='B'):
break
return ret
+
+
+def get_objectstore_fields(objstore=None):
+ """
+ Return a list with all fields from the objectstore.
+ """
+ if objstore is None:
+ wok_log.error("No objectstore set up.")
+ return None
+ conn = sqlite3.connect(objstore, timeout=10)
+ cursor = conn.cursor()
+ schema_fields = []
+ sql = "PRAGMA table_info('objects')"
+ cursor.execute(sql)
+ for row in cursor.fetchall():
+ schema_fields.append(row[1])
+ return schema_fields
+
+
+def upgrade_objectstore_schema(objstore=None, field=None):
+ """
+ Add a new column (of type TEXT) in the objectstore schema.
+ """
+ if (field or objstore) is None:
+ wok_log.error("Cannot upgrade objectstore schema.")
+ return False
+
+ if field in get_objectstore_fields(objstore):
+ # field already exists in objectstore schema. Nothing to do.
+ return False
+ try:
+ conn = sqlite3.connect(objstore, timeout=10)
+ cursor = conn.cursor()
+ sql = "ALTER TABLE objects ADD COLUMN %s TEXT" % field
+ cursor.execute(sql)
+ wok_log.info("Objectstore schema sucessfully upgraded: %s" % objstore)
+ conn.close()
+ except sqlite3.Error, e:
+ if conn:
+ conn.rollback()
+ conn.close()
+ wok_log.error("Cannot upgrade objectstore schema: %s" % e.args[0])
+ return False
+ return True
--
2.5.0
More information about the Kimchi-devel
mailing list