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

Paulo Ricardo Paz Vital pvital at linux.vnet.ibm.com
Tue Oct 13 23:31:05 UTC 2015


Reviewed-By: Paulo Vital <pvital at linux.vnet.ibm.com>

On Tue, 2015-10-13 at 18:54 -0300, Lucio Correia wrote:
> 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:




More information about the Kimchi-devel mailing list