[Kimchi-devel] [PATCH] [Wok] Upgrade objectstore schema.

Rodrigo Trujillo rodrigo.trujillo at linux.vnet.ibm.com
Mon Dec 14 18:11:03 UTC 2015


Reviewed-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>

On 12/14/2015 03:05 PM, pvital at linux.vnet.ibm.com wrote:
> 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
>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>




More information about the Kimchi-devel mailing list