Author: nunofsantos
Date: 2008-11-18 17:30:59 -0500 (Tue, 18 Nov 2008)
New Revision: 2838
Modified:
mgmt/trunk/mint/python/mint/schema.py
mgmt/trunk/mint/python/mint/update.py
mgmt/trunk/mint/sql/schema.sql
Log:
discard updates for classes that are missing from the schema
Modified: mgmt/trunk/mint/python/mint/schema.py
===================================================================
--- mgmt/trunk/mint/python/mint/schema.py 2008-11-18 22:04:43 UTC (rev 2837)
+++ mgmt/trunk/mint/python/mint/schema.py 2008-11-18 22:30:59 UTC (rev 2838)
@@ -1257,7 +1257,7 @@
-class SysImage(SQLObject):
+class Sysimage(SQLObject):
class sqlmeta:
lazyUpdate = True
@@ -1269,8 +1269,8 @@
creationTime = TimestampCol(default=None)
deletionTime = TimestampCol(default=None)
managedBroker = StringCol(length=1000, default=None)
- statsCurr = ForeignKey('SysImageStats', cascade='null', default=None)
- statsPrev = ForeignKey('SysImageStats', cascade='null', default=None)
+ statsCurr = ForeignKey('SysimageStats', cascade='null', default=None)
+ statsPrev = ForeignKey('SysimageStats', cascade='null', default=None)
classInfos = dict() # brokerId => classInfo
uuid = BLOBCol(default=None)
osName = StringCol(length=1000, default=None)
@@ -1282,12 +1282,12 @@
swapTotal = IntCol(default=None)
-class SysImageStats(SQLObject):
+class SysimageStats(SQLObject):
class sqlmeta:
lazyUpdate = True
recTime = TimestampCol(default=None)
- sysImage = ForeignKey('SysImage', cascade='null', default=None)
+ sysimage = ForeignKey('Sysimage', cascade='null', default=None)
classInfos = dict() # brokerId => classInfo
memFree = IntCol(default=None)
swapFree = IntCol(default=None)
@@ -1474,8 +1474,8 @@
Session.sqlmeta.addJoin(SQLMultipleJoin('SessionStats',
joinMethodName='stats'))
-classToSchemaNameMap['SysImage'] = 'SysImage'
-schemaNameToClassMap['SysImage'] = SysImage
+classToSchemaNameMap['Sysimage'] = 'Sysimage'
+schemaNameToClassMap['Sysimage'] = Sysimage
-SysImage.sqlmeta.addJoin(SQLMultipleJoin('SysImageStats',
joinMethodName='stats'))
+Sysimage.sqlmeta.addJoin(SQLMultipleJoin('SysimageStats',
joinMethodName='stats'))
Modified: mgmt/trunk/mint/python/mint/update.py
===================================================================
--- mgmt/trunk/mint/python/mint/update.py 2008-11-18 22:04:43 UTC (rev 2837)
+++ mgmt/trunk/mint/python/mint/update.py 2008-11-18 22:30:59 UTC (rev 2838)
@@ -81,43 +81,46 @@
name = key.__repr__()
if name in mint.schema.schemaReservedWordsMap:
name = mint.schema.schemaReservedWordsMap.get(name)
-
- if key.type == 10:
- # Navigate to referenced objects
- if name.endswith("Ref"):
- name = name[:-3]
- className = name[0].upper() + name[1:]
- otherClass = getattr(mint, className, None)
- if otherClass:
- foreignKey = name + "_id"
- try:
- results[foreignKey] = model.getObjectId(otherClass, value)
- except KeyError:
- log.info("Referenced object %s '%s' not found by key
'%s'" % (className, value, foreignKey))
- except mint.ObjectNotFound:
- if not orphan:
- log.info("Referenced object %s '%s' not found, deferring
creation of orphan object" % (className, value))
- # store object in orphan map, will be picked up later when parent info is
received
- if (className, value.first, value.second) not in model.orphanObjectMap:
- model.orphanObjectMap[(className, value.first, value.second)] = set()
- model.orphanObjectMap[(className, value.first, value.second)].add(self)
- orphan = True
+
+ try:
+ if not hasattr(getattr(mint, cls), name):
+ # Discard attrs that we don't have in our schema
+ log.debug("Class '%s' has no field '%s'" %
("mint.schema." + cls, name))
+ elif key.type == 10:
+ # Navigate to referenced objects
+ if name.endswith("Ref"):
+ name = name[:-3]
+ className = name[0].upper() + name[1:]
+ otherClass = getattr(mint, className, None)
+ if otherClass:
+ foreignKey = name + "_id"
+ try:
+ results[foreignKey] = model.getObjectId(otherClass, value)
+ except KeyError:
+ log.info("Referenced object %s '%s' not found by key
'%s'" % (className, value, foreignKey))
+ except mint.ObjectNotFound:
+ if not orphan:
+ log.info("Referenced object %s '%s' not found, deferring
creation of orphan object" % (className, value))
+ # store object in orphan map, will be picked up later when parent info is
received
+ if (className, value.first, value.second) not in model.orphanObjectMap:
+ model.orphanObjectMap[(className, value.first, value.second)] = set()
+ model.orphanObjectMap[(className, value.first, value.second)].add(self)
+ orphan = True
+ else:
+ log.error("Class '%s' not found" % className)
+ elif key.type == 8:
+ # convert ABSTIME types
+ if value:
+ results[name] = time_unwarp(datetime.fromtimestamp(value/1000000000))
+ else:
+ results[name] = None
+ elif key.type == 14:
+ # convert UUIDs into their string representation, to be handled by sqlobject
+ results[name] = str(value)
else:
- log.error("Class '%s' not found" % className)
- elif key.type == 8:
- # convert ABSTIME types
- if value:
- results[name] = time_unwarp(datetime.fromtimestamp(value/1000000000))
- else:
- results[name] = None
- elif key.type == 14:
- # convert UUIDs into their string representation, to be handled by sqlobject
- results[name] = str(value)
- elif not hasattr(getattr(mint, cls), name):
- # Remove attrs that we don't have in our schema
- log.debug("Class '%s' has no field '%s'" %
("mint.schema." + cls, name))
- else:
- results[name] = value
+ results[name] = value
+ except Exception:
+ continue
if orphan:
return None
else:
@@ -129,17 +132,22 @@
def process(self, model):
try:
- properties = self.qmfObj.getProperties()
- timestamps = self.qmfObj.getTimestamps()
- id = self.qmfObj.getObjectId()
pkg, cls, hash = self.qmfObj.getClassKey()
-
origCls = cls
if cls in mint.schema.schemaReservedWordsMap:
cls = mint.schema.schemaReservedWordsMap.get(cls)
cls = cls[0].upper()+cls[1:]
sqlCls = model.dbStyle.pythonClassToDBTable(cls)
+ if not hasattr(mint, cls):
+ # Discard classes that we don't have in our schema
+ log.debug("Class '%s' is not in the schema" % (cls))
+ return
+
+ properties = self.qmfObj.getProperties()
+ timestamps = self.qmfObj.getTimestamps()
+ id = self.qmfObj.getObjectId()
+
attrs = self.processAttributes(properties, cls, model)
if attrs == None:
# object is orphan, a parent dependency was not found;
@@ -220,9 +228,6 @@
def process(self, model):
try:
- statistics = self.qmfObj.getStatistics()
- timestamps = self.qmfObj.getTimestamps()
- id = self.qmfObj.getObjectId()
pkg, cls, hash = self.qmfObj.getClassKey()
origCls = cls
@@ -230,6 +235,15 @@
cls = mint.schema.schemaReservedWordsMap.get(cls)
cls = cls[0].upper()+cls[1:]
sqlCls = model.dbStyle.pythonClassToDBTable(cls)
+
+ if not hasattr(mint, cls):
+ # Discard classes that we don't have in our schema
+ log.debug("Class '%s' is not in the schema" % (cls))
+ return
+
+ statistics = self.qmfObj.getStatistics()
+ timestamps = self.qmfObj.getTimestamps()
+ id = self.qmfObj.getObjectId()
statsCls = self.getStatsClass(cls)
sqlStatsCls = model.dbStyle.pythonClassToDBTable(statsCls)
Modified: mgmt/trunk/mint/sql/schema.sql
===================================================================
--- mgmt/trunk/mint/sql/schema.sql 2008-11-18 22:04:43 UTC (rev 2837)
+++ mgmt/trunk/mint/sql/schema.sql 2008-11-18 22:30:59 UTC (rev 2838)
@@ -838,7 +838,7 @@
running_jobs INT
);
-CREATE TABLE sys_image (
+CREATE TABLE sysimage (
id SERIAL PRIMARY KEY,
rec_time TIMESTAMP,
source_scope_id BIGINT,
@@ -858,12 +858,12 @@
mem_total INT,
swap_total INT
);
-CREATE UNIQUE INDEX sys_image_source_ids_unique ON sys_image (source_scope_id,
source_object_id);
+CREATE UNIQUE INDEX sysimage_source_ids_unique ON sysimage (source_scope_id,
source_object_id);
-CREATE TABLE sys_image_stats (
+CREATE TABLE sysimage_stats (
id SERIAL PRIMARY KEY,
rec_time TIMESTAMP,
- sys_image_id INT,
+ sysimage_id INT,
mem_free INT,
swap_free INT,
load_average1_min FLOAT,
@@ -1096,11 +1096,11 @@
ALTER TABLE submitter_stats ADD CONSTRAINT submitter_id_exists FOREIGN KEY (submitter_id)
REFERENCES submitter (id) ON DELETE SET NULL;
-ALTER TABLE sys_image ADD CONSTRAINT stats_curr_id_exists FOREIGN KEY (stats_curr_id)
REFERENCES sys_image_stats (id) ON DELETE SET NULL;
+ALTER TABLE sysimage ADD CONSTRAINT stats_curr_id_exists FOREIGN KEY (stats_curr_id)
REFERENCES sysimage_stats (id) ON DELETE SET NULL;
-ALTER TABLE sys_image ADD CONSTRAINT stats_prev_id_exists FOREIGN KEY (stats_prev_id)
REFERENCES sys_image_stats (id) ON DELETE SET NULL;
+ALTER TABLE sysimage ADD CONSTRAINT stats_prev_id_exists FOREIGN KEY (stats_prev_id)
REFERENCES sysimage_stats (id) ON DELETE SET NULL;
-ALTER TABLE sys_image_stats ADD CONSTRAINT sys_image_id_exists FOREIGN KEY (sys_image_id)
REFERENCES sys_image (id) ON DELETE SET NULL;
+ALTER TABLE sysimage_stats ADD CONSTRAINT sysimage_id_exists FOREIGN KEY (sysimage_id)
REFERENCES sysimage (id) ON DELETE SET NULL;
ALTER TABLE system ADD CONSTRAINT stats_curr_id_exists FOREIGN KEY (stats_curr_id)
REFERENCES system_stats (id) ON DELETE SET NULL;