Author: tmckay Date: 2011-06-15 17:41:26 +0000 (Wed, 15 Jun 2011) New Revision: 4834
Modified: trunk/cumin/model/rosemary.xml trunk/mint/python/mint/update.py trunk/rosemary/python/rosemary/model.py Log: Allow "persistent" attribute for Rosemary package and class in extension xml file. Items marked persistent will not be deleted on cumin start or delete_agent_objects. (BZ702440 tweaks)
Modified: trunk/cumin/model/rosemary.xml =================================================================== --- trunk/cumin/model/rosemary.xml 2011-06-15 12:58:50 UTC (rev 4833) +++ trunk/cumin/model/rosemary.xml 2011-06-15 17:41:26 UTC (rev 4834) @@ -1,5 +1,5 @@ <model> - <package name="com.redhat.cumin"> + <package name="com.redhat.cumin" persistent="y"> <class name="User"> <property name="name" unique="y"/> </class>
Modified: trunk/mint/python/mint/update.py =================================================================== --- trunk/mint/python/mint/update.py 2011-06-15 12:58:50 UTC (rev 4833) +++ trunk/mint/python/mint/update.py 2011-06-15 17:41:26 UTC (rev 4834) @@ -29,8 +29,11 @@ def _delete_all_objects(self): def loop_body(cls): if cls._storage != "none": - cls.delete_selection(self.cursor) - self.cursor.connection.commit() + if cls.check_persistent(): + log.debug("Skipping persistent class " + str(cls)) + else: + cls.delete_selection(self.cursor) + self.cursor.connection.commit()
if len(self.app.qmf_classes): log.debug("Delete all objects by bound classes " + str(self.app.qmf_classes)) @@ -614,7 +617,7 @@ def delete_agent_objects(self, cursor, stats, agent, bound_classes, bound_packages):
def loop_body(cls): - if cls._storage != "none": # and cls is not self.model.com_redhat_grid.Collector: + if cls._storage != "none" and not cls.check_persistent(): count = cls.delete_selection(cursor, _qmf_agent_id=agent.id) stats.objects_deleted += count #stats.objects_deleted_by_class[cls] += count
Modified: trunk/rosemary/python/rosemary/model.py =================================================================== --- trunk/rosemary/python/rosemary/model.py 2011-06-15 12:58:50 UTC (rev 4833) +++ trunk/rosemary/python/rosemary/model.py 2011-06-15 17:41:26 UTC (rev 4834) @@ -56,12 +56,20 @@ file.close()
def load(self, elem): + # This is an attribute on a top level tag, + # it should correspond to something like <schema package="blah"> attr = elem.get("package")
if attr: pkg = RosemaryPackage(self, attr) pkg.load(elem)
+ # This on the other hand is a tag itself. It should + # correspond to something like + # <model> + # <package ....> + # stuff + # </package> for child in elem.findall("package"): pkg = RosemaryPackage(self, child.get("name")) pkg.load(child) @@ -98,6 +106,18 @@ self._model = model self._name = name
+ # Set in the extension xml file. This marks a package as + # containing persistent data which should not be deleted + # by cumin-data on startup or in association with + # the comings and goings of agents. Rather, it + # should be manipulated by specific interfaces. + # com.redhat.cumin is an example. + + # Note, "persistent" may also be set at the class + # level in cases where packages contain both persistent + # and non-persistent data. + self.persistent = False + self._model._packages.append(self) self._model._packages_by_name[self._name] = self
@@ -126,6 +146,10 @@ cls.load(child, groups_by_name)
def extend(self, elem): + persistent = elem.get("persistent") + if persistent is not None: + self.persistent = persistent == "y" + for child in elem.findall("class"): cls = self._classes_by_name[child.get("name")] cls.extend(child) @@ -147,6 +171,10 @@ self._package = package self._name = name
+ # If _persistent is None, check_persistent will + # return the value from self._package + self._persistent = None + self._package._classes.append(self) self._package._classes_by_name[self._name] = self self._package._classes_by_lowercase_name[self._name.lower()] = self @@ -254,6 +282,10 @@
self._object_title = elem.findtext("object/title")
+ persistent = elem.get("persistent") + if persistent is not None: + self._persistent = persistent == "y" + for child in elem.findall("property"): prop = self._properties_by_name[child.get("name")] prop.extend(child) @@ -270,6 +302,11 @@ idx = RosemaryIndex(self, child.get("name")) idx.extend(child)
+ def check_persistent(self): + if self._persistent is None: + return self._package.persistent + return self._persistent + def init(self): log.debug("Initializing %s", self)
cumin-developers@lists.fedorahosted.org