[Kimchi-devel] [PATCH] Fix issue #738 - Split Wok and Kimchi object stores

Lucio Correia luciojhc at linux.vnet.ibm.com
Tue Oct 13 21:54:10 UTC 2015


Wok and Kimchi currently share the same object store. This
patch creates a specific store for Kimchi to avoid name
conflicts with Wok and other plugins in future.

It also makes objectstore location a required parameter for
model instantiation, since there is no more default location
provided by Wok. Each plugin will have its own object store
in its own location

Signed-off-by: Lucio Correia <luciojhc at linux.vnet.ibm.com>
---
 Makefile.am                                          | 5 ++++-
 contrib/wok.spec.fedora.in                           | 3 ++-
 contrib/wok.spec.suse.in                             | 3 ++-
 src/wok/model/model.py                               | 2 +-
 src/wok/objectstore.py                               | 5 ++---
 src/wok/plugins/kimchi/Makefile.am                   | 4 ++--
 src/wok/plugins/kimchi/config.py.in                  | 4 ++++
 src/wok/plugins/kimchi/contrib/kimchi.spec.fedora.in | 2 +-
 src/wok/plugins/kimchi/contrib/kimchi.spec.suse.in   | 2 +-
 src/wok/plugins/kimchi/mockmodel.py                  | 2 +-
 src/wok/plugins/kimchi/root.py                       | 7 +++++--
 src/wok/plugins/kimchi/tests/test_yumparser.py       | 3 ++-
 src/wok/server.py                                    | 2 +-
 13 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 8d2f346..54bc521 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -83,6 +83,8 @@ install-deb: install
 		cp -R $(top_srcdir)/contrib/wokd-upstart.conf.debian \
 			$(DESTDIR)/etc/init/wokd.conf; \
 	fi
+	$(MKDIR_P) -p $(DESTDIR)/$(localstatedir)/lib/wok/
+	touch $(DESTDIR)/$(localstatedir)/lib/wok/objectstore
 	$(MKDIR_P) $(DESTDIR)/usr/lib/firewalld/services
 	cp -R $(top_srcdir)/src/firewalld.xml \
 		$(DESTDIR)/usr/lib/firewalld/services/wokd.xml
@@ -128,12 +130,13 @@ install-data-local:
 		mkdir -p $(DESTDIR)/etc/init.d/; \
 		$(INSTALL_DATA) contrib/wokd.sysvinit $(DESTDIR)/etc/init.d/wokd; \
 		chmod +x $(DESTDIR)/etc/init.d/wokd; \
-    fi; \
+	fi; \
 	if test -d /usr/lib/firewalld/services/; then \
 		mkdir -p $(DESTDIR)/usr/lib/firewalld/services/; \
 		$(INSTALL_DATA) src/firewalld.xml $(DESTDIR)/usr/lib/firewalld/services/wokd.xml; \
 	fi; \
 	mkdir -p $(DESTDIR)/$(localstatedir)/lib/wok/
+	touch $(DESTDIR)/$(localstatedir)/lib/wok/objectstore
 	mkdir -p $(DESTDIR)/$(localstatedir)/log/wok/
 	touch $(DESTDIR)/$(localstatedir)/log/wok/wok-access.log
 	touch $(DESTDIR)/$(localstatedir)/log/wok/wok-error.log
diff --git a/contrib/wok.spec.fedora.in b/contrib/wok.spec.fedora.in
index 8941ff7..ad9988e 100644
--- a/contrib/wok.spec.fedora.in
+++ b/contrib/wok.spec.fedora.in
@@ -122,6 +122,7 @@ rm -rf $RPM_BUILD_ROOT
 %if 0%{?with_systemd}
 %{_sysconfdir}/nginx/conf.d/wok.conf
 %{_sharedstatedir}/wok/
+%{_sharedstatedir}/wok/objectstore
 %{_localstatedir}/log/wok/*
 %{_localstatedir}/log/wok/
 %{_unitdir}/wokd.service
@@ -135,7 +136,7 @@ rm -rf $RPM_BUILD_ROOT
 %endif
 
 %changelog
-* Fri Jun 19 2015 Lucio Correia <luciojhc at linux.vnet.ibm.com> 1.6
+* Fri Jun 19 2015 Lucio Correia <luciojhc at linux.vnet.ibm.com> 2.0
 - Rename to wokd
 - Remove kimchi specifics
 
diff --git a/contrib/wok.spec.suse.in b/contrib/wok.spec.suse.in
index 161b996..4b5e4f3 100644
--- a/contrib/wok.spec.suse.in
+++ b/contrib/wok.spec.suse.in
@@ -95,6 +95,7 @@ rm -rf $RPM_BUILD_ROOT
 %{_sysconfdir}/nginx/conf.d/wok.conf.in
 %{_sysconfdir}/nginx/conf.d/wok.conf
 %{_var}/lib/wok/
+%{_var}/lib/wok/objectstore
 %{_localstatedir}/log/wok/*
 %{_localstatedir}/log/wok/
 %{_mandir}/man8/wokd.8.gz
@@ -115,7 +116,7 @@ rm -rf $RPM_BUILD_ROOT
 
 
 %changelog
-* Fri Jun 19 2015 Lucio Correia <luciojhc at linux.vnet.ibm.com> 1.6
+* Fri Jun 19 2015 Lucio Correia <luciojhc at linux.vnet.ibm.com> 2.0
 - Rename to wokd
 - Remove kimchi specifics
 
diff --git a/src/wok/model/model.py b/src/wok/model/model.py
index e8826f2..cb213d3 100644
--- a/src/wok/model/model.py
+++ b/src/wok/model/model.py
@@ -28,7 +28,7 @@ from wok.utils import import_module, listPathModules
 
 
 class Model(BaseModel):
-    def __init__(self, objstore_loc=None):
+    def __init__(self, objstore_loc):
 
         self.objstore = ObjectStore(objstore_loc)
         kargs = {'objstore': self.objstore}
diff --git a/src/wok/objectstore.py b/src/wok/objectstore.py
index 670a363..810c5be 100644
--- a/src/wok/objectstore.py
+++ b/src/wok/objectstore.py
@@ -29,7 +29,6 @@ except ImportError:
     from ordereddict import OrderedDict
 
 
-from wok import config
 from wok.exception import NotFoundError
 from wok.utils import wok_log
 
@@ -83,10 +82,10 @@ class ObjectStoreSession(object):
 
 
 class ObjectStore(object):
-    def __init__(self, location=None):
+    def __init__(self, location):
         self._lock = threading.Semaphore()
         self._connections = OrderedDict()
-        self.location = location or config.get_object_store()
+        self.location = location
         with self._lock:
             self._init_db()
 
diff --git a/src/wok/plugins/kimchi/Makefile.am b/src/wok/plugins/kimchi/Makefile.am
index 1080005..404c3f4 100644
--- a/src/wok/plugins/kimchi/Makefile.am
+++ b/src/wok/plugins/kimchi/Makefile.am
@@ -99,7 +99,7 @@ config.py: config.py.in Makefile
 install-deb: install
 	cp -R $(top_srcdir)/contrib/DEBIAN $(DESTDIR)/
 	mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi
-	touch $(DESTDIR)/$(localstatedir)/lib/wok/objectstore
+	touch $(DESTDIR)/$(localstatedir)/lib/kimchi/objectstore
 	mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi/vnc-tokens
 	mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi/debugreports
 	mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi/screenshots
@@ -140,7 +140,7 @@ ChangeLog:
 
 install-data-local:
 	$(MKDIR_P) $(DESTDIR)/$(localstatedir)/lib/kimchi/
-	touch $(DESTDIR)/$(localstatedir)/lib/wok/objectstore
+	touch $(DESTDIR)/$(localstatedir)/lib/kimchi/objectstore
 	$(MKDIR_P) $(DESTDIR)$(kimchidir)
 	$(INSTALL_DATA) API.json $(DESTDIR)$(kimchidir)/API.json
 	mkdir -p $(DESTDIR)/$(localstatedir)/lib/kimchi/vnc-tokens
diff --git a/src/wok/plugins/kimchi/config.py.in b/src/wok/plugins/kimchi/config.py.in
index 6ae0ccd..43e94e1 100644
--- a/src/wok/plugins/kimchi/config.py.in
+++ b/src/wok/plugins/kimchi/config.py.in
@@ -42,6 +42,10 @@ def get_debugreports_path():
     return os.path.join(PluginPaths('kimchi').state_dir, 'debugreports')
 
 
+def get_object_store():
+    return os.path.join(PluginPaths('kimchi').state_dir, 'objectstore')
+
+
 def get_screenshot_path():
     return os.path.join(PluginPaths('kimchi').state_dir, 'screenshots')
 
diff --git a/src/wok/plugins/kimchi/contrib/kimchi.spec.fedora.in b/src/wok/plugins/kimchi/contrib/kimchi.spec.fedora.in
index e4b7b6d..41a8a86 100644
--- a/src/wok/plugins/kimchi/contrib/kimchi.spec.fedora.in
+++ b/src/wok/plugins/kimchi/contrib/kimchi.spec.fedora.in
@@ -100,10 +100,10 @@ rm -rf $RPM_BUILD_ROOT
 %{_sysconfdir}/kimchi/
 %{_sharedstatedir}/kimchi/debugreports/
 %{_sharedstatedir}/kimchi/isos/
+%{_sharedstatedir}/kimchi/objectstore
 %{_sharedstatedir}/kimchi/screenshots/
 %{_sharedstatedir}/kimchi/vnc-tokens/
 %{_sharedstatedir}/kimchi/
-%{_sharedstatedir}/wok/objectstore
 
 
 %changelog
diff --git a/src/wok/plugins/kimchi/contrib/kimchi.spec.suse.in b/src/wok/plugins/kimchi/contrib/kimchi.spec.suse.in
index 03dfa7b..6fbdb3e 100644
--- a/src/wok/plugins/kimchi/contrib/kimchi.spec.suse.in
+++ b/src/wok/plugins/kimchi/contrib/kimchi.spec.suse.in
@@ -87,10 +87,10 @@ rm -rf $RPM_BUILD_ROOT
 %{_sysconfdir}/kimchi/
 %{_var}/lib/kimchi/debugreports/
 %{_var}/lib/kimchi/isos/
+%{_var}/lib/kimchi/objectstore
 %{_var}/lib/kimchi/screenshots/
 %{_var}/lib/kimchi/vnc-tokens/
 %{_var}/lib/kimchi/
-%{_var}/lib/wok/objectstore
 
 
 %changelog
diff --git a/src/wok/plugins/kimchi/mockmodel.py b/src/wok/plugins/kimchi/mockmodel.py
index 0832b20..4dd063c 100644
--- a/src/wok/plugins/kimchi/mockmodel.py
+++ b/src/wok/plugins/kimchi/mockmodel.py
@@ -67,7 +67,7 @@ class MockModel(Model):
     _undefineDomain = libvirt.virDomain.undefine
     _libvirt_get_vol_path = LibvirtVMTemplate._get_volume_path
 
-    def __init__(self, objstore_loc=None):
+    def __init__(self, objstore_loc):
         # Override osinfo.defaults to ajust the values according to
         # test:///default driver
         defaults = dict(osinfo.defaults)
diff --git a/src/wok/plugins/kimchi/root.py b/src/wok/plugins/kimchi/root.py
index 1e2bfc7..21c3131 100644
--- a/src/wok/plugins/kimchi/root.py
+++ b/src/wok/plugins/kimchi/root.py
@@ -33,12 +33,14 @@ from model import model as kimchiModel
 
 class KimchiRoot(WokRoot):
     def __init__(self, wok_options):
+        objstore_loc = config.get_object_store()
         if hasattr(wok_options, "model"):
             self.model = wok_options.model
         elif wok_options.test:
-            self.model = mockmodel.MockModel()
+            mockstore = "%s-mock" % os.path.abspath(objstore_loc)
+            self.model = mockmodel.MockModel(mockstore)
         else:
-            self.model = kimchiModel.Model()
+            self.model = kimchiModel.Model(objstore_loc=objstore_loc)
 
         dev_env = wok_options.environment != 'production'
         super(KimchiRoot, self).__init__(self.model, dev_env)
@@ -57,6 +59,7 @@ class KimchiRoot(WokRoot):
         self.messages = messages
 
         make_dirs = [
+            os.path.dirname(os.path.abspath(config.get_object_store())),
             os.path.abspath(config.get_distros_store()),
             os.path.abspath(config.get_debugreports_path()),
             os.path.abspath(config.get_screenshot_path())
diff --git a/src/wok/plugins/kimchi/tests/test_yumparser.py b/src/wok/plugins/kimchi/tests/test_yumparser.py
index be5e95c..c69f574 100644
--- a/src/wok/plugins/kimchi/tests/test_yumparser.py
+++ b/src/wok/plugins/kimchi/tests/test_yumparser.py
@@ -23,6 +23,7 @@ import unittest
 
 from wok.rollbackcontext import RollbackContext
 
+from wok.plugins.kimchi import config
 from wok.plugins.kimchi.model import model
 from wok.plugins.kimchi.yumparser import delete_repo_from_file, get_repo_files
 from wok.plugins.kimchi.yumparser import get_yum_packages_list_update
@@ -34,7 +35,7 @@ TEMP_REPO_FILE = ''
 
 
 def _is_yum_distro():
-    inst = model.Model('test:///default')
+    inst = model.Model('test:///default', config.get_object_store())
     repo_type = inst.capabilities_lookup()['repo_mngt_tool']
     return repo_type == 'yum'
 
diff --git a/src/wok/server.py b/src/wok/server.py
index c6f12dd..071c425 100644
--- a/src/wok/server.py
+++ b/src/wok/server.py
@@ -124,7 +124,7 @@ class Server(object):
         if hasattr(options, 'model'):
             model_instance = options.model
         else:
-            model_instance = model.Model()
+            model_instance = model.Model(config.get_object_store())
 
         for ident, node in sub_nodes.items():
             if node.url_auth:
-- 
1.9.1




More information about the Kimchi-devel mailing list