def validate_boost_version(self, t, timetype, tagBoostVersion): cursor = self.db.cursor() cursor.execute( 'SELECT GT.NAME, GT.RELEASE, GT.SNAPSHOT_TIME FROM GLOBAL_TAG GT, GLOBAL_TAG_MAP GTM WHERE GT.NAME = GTM.GLOBAL_TAG_NAME AND GTM.TAG_NAME = :TAG_NAME', (t, )) rows = cursor.fetchall() invalid_gts = [] ngt = 0 gts = [] for r in rows: gts.append((r[0], r[1], r[2])) if len(gts) > 0: logging.info('validating %s gts.' % len(gts)) boost_snapshot_map = {} for gt in gts: ngt += 1 logging.debug('Validating for GT %s (release %s)' % (gt[0], gt[1])) gtCMSSWVersion = sm.check_cmssw_version(gt[1]) gtBoostVersion = self.version_db.lookup_boost_in_cmssw( gtCMSSWVersion) if sm.cmp_boost_version(gtBoostVersion, tagBoostVersion) < 0: logging.warning( 'The boost version computed from all the iovs in the tag (%s) is incompatible with the gt [%s] %s (consuming ver: %s, snapshot: %s)' % (tagBoostVersion, ngt, gt[0], gtBoostVersion, str(gt[2]))) if str(gt[2]) not in boost_snapshot_map.keys(): tagSnapshotBoostVersion = None minIov = None tagSnapshotBoostVersion, minIov = self.process_tag_boost_version( t, timetype, tagSnapshotBoostVersion, minIov, gt[2]) if tagSnapshotBoostVersion is not None: boost_snapshot_map[str( gt[2])] = tagSnapshotBoostVersion else: continue else: tagSnapshotBoostVersion = boost_snapshot_map[str(gt[2])] if sm.cmp_boost_version(gtBoostVersion, tagSnapshotBoostVersion) < 0: logging.error( 'The snapshot from tag used by gt %s (consuming ver: %s) has an incompatible combined boost version %s' % (gt[0], gtBoostVersion, tagSnapshotBoostVersion)) invalid_gts.append((gt[0], gtBoostVersion)) if len(invalid_gts) == 0: if ngt > 0: logging.info( 'boost version for the tag validated in %s referencing Gts' % (ngt)) else: logging.info('No GT referencing this tag found.') else: logging.error('boost version for the tag is invalid.') return invalid_gts
def lookup_boost_in_cmssw(self, cmssw_version): cmssw_v = sm.check_cmssw_version(cmssw_version) the_arch = None releaseRoot = None if sm.is_release_cycle(cmssw_v): cmssw_v = sm.strip_cmssw_version(cmssw_v) archs = sm.get_production_arch(cmssw_v) for arch in archs: path = sm.get_release_root(cmssw_v, arch) if os.path.exists(os.path.join(path, cmssw_v)): releaseRoot = path the_arch = arch break if releaseRoot is None: for arch in archs: the_arch = arch releaseRoot = sm.get_release_root(cmssw_v, arch) for r in sorted(os.listdir(releaseRoot)): if r.startswith(cmssw_v): cmssw_v = r logging.debug('Boost version will be verified in release %s' % cmssw_v) if cmssw_v in self.cmssw_boost_map.keys(): return self.cmssw_boost_map[cmssw_v] if releaseRoot is None: archs = sm.get_production_arch(cmssw_v) for arch in archs: path = sm.get_release_root(cmssw_v, arch) if os.path.exists(os.path.join(path, cmssw_v)): releaseRoot = path the_arch = arch break logging.debug('Release path: %s' % releaseRoot) boost_version = sm.get_cmssw_boost(the_arch, '%s/%s' % (releaseRoot, cmssw_v)) if not boost_version is None: self.cmssw_boost_map[cmssw_v] = boost_version self.insert_cmssw_boost(cmssw_v, boost_version) return boost_version
def validate_boost_version( self, t, timetype, tagBoostVersion ): cursor = self.db.cursor() cursor.execute('SELECT GT.NAME, GT.RELEASE, GT.SNAPSHOT_TIME FROM GLOBAL_TAG GT, GLOBAL_TAG_MAP GTM WHERE GT.NAME = GTM.GLOBAL_TAG_NAME AND GTM.TAG_NAME = :TAG_NAME',(t,)) rows = cursor.fetchall() invalid_gts = [] ngt = 0 gts = [] for r in rows: gts.append((r[0],r[1],r[2])) if len(gts)>0: logging.info('validating %s gts.' %len(gts)) boost_snapshot_map = {} for gt in gts: ngt += 1 logging.debug('Validating for GT %s (release %s)' %(gt[0],gt[1])) gtCMSSWVersion = sm.check_cmssw_version( gt[1] ) gtBoostVersion = self.version_db.lookup_boost_in_cmssw( gtCMSSWVersion ) if sm.cmp_boost_version( gtBoostVersion, tagBoostVersion )<0: logging.warning( 'The boost version computed from all the iovs in the tag (%s) is incompatible with the gt [%s] %s (consuming ver: %s, snapshot: %s)' %(tagBoostVersion,ngt,gt[0],gtBoostVersion,str(gt[2]))) if str(gt[2]) not in boost_snapshot_map.keys(): tagSnapshotBoostVersion = None minIov = None tagSnapshotBoostVersion, minIov = self.process_tag_boost_version(t, timetype, tagSnapshotBoostVersion, minIov, gt[2]) if tagSnapshotBoostVersion is not None: boost_snapshot_map[str(gt[2])] = tagSnapshotBoostVersion else: continue else: tagSnapshotBoostVersion = boost_snapshot_map[str(gt[2])] if sm.cmp_boost_version( gtBoostVersion, tagSnapshotBoostVersion )<0: logging.error('The snapshot from tag used by gt %s (consuming ver: %s) has an incompatible combined boost version %s' %(gt[0],gtBoostVersion,tagSnapshotBoostVersion)) invalid_gts.append( ( gt[0], gtBoostVersion ) ) if len(invalid_gts)==0: if ngt>0: logging.info('boost version for the tag validated in %s referencing Gts' %(ngt)) else: logging.info('No GT referencing this tag found.') else: logging.error( 'boost version for the tag is invalid.') return invalid_gts
def lookup_boost_in_cmssw( self, cmssw_version ): cmssw_v = sm.check_cmssw_version( cmssw_version ) the_arch = None releaseRoot = None if sm.is_release_cycle( cmssw_v ): cmssw_v = sm.strip_cmssw_version( cmssw_v ) archs = sm.get_production_arch( cmssw_v ) for arch in archs: path = sm.get_release_root( cmssw_v, arch ) if os.path.exists(os.path.join(path,cmssw_v)): releaseRoot = path the_arch = arch break if releaseRoot is None: for arch in archs: the_arch = arch releaseRoot = sm.get_release_root( cmssw_v, arch ) for r in sorted (os.listdir( releaseRoot )): if r.startswith(cmssw_v): cmssw_v = r logging.debug('Boost version will be verified in release %s' %cmssw_v) if cmssw_v in self.cmssw_boost_map.keys(): return self.cmssw_boost_map[cmssw_v] if releaseRoot is None: archs = sm.get_production_arch( cmssw_v ) for arch in archs: path = sm.get_release_root( cmssw_v, arch ) if os.path.exists(os.path.join(path,cmssw_v)): releaseRoot = path the_arch = arch break logging.debug('Release path: %s' %releaseRoot) boost_version = sm.get_cmssw_boost( the_arch, '%s/%s' %(releaseRoot,cmssw_v) ) if not boost_version is None: self.cmssw_boost_map[cmssw_v] = boost_version self.insert_cmssw_boost( cmssw_v,boost_version ) return boost_version