async def revCoreLayers(self): version = self.revs[-1][0] if self.revs else maxvers # do a first pass to detect layers at the wrong version # that we are not able to rev ourselves and bail... layers = [] for layr in self.core.layers.values(): if layr.fresh: await layr.setModelVers(version) continue vers = await layr.getModelVers() if vers == version: continue if not layr.canrev and vers != version: mesg = f'layer {layr.__class__.__name__} {layr.iden} ({layr.dirn}) can not be updated.' raise s_exc.CantRevLayer(layer=layr.iden, mesg=mesg, curv=version, layv=vers) if vers > version: mesg = f'layer {layr.__class__.__name__} {layr.iden} ({layr.dirn}) is from the future!' raise s_exc.CantRevLayer(layer=layr.iden, mesg=mesg, curv=version, layv=vers) # realistically all layers are probably at the same version... but... layers.append(layr) # got anything to do? if not layers: return for revvers, revmeth in self.revs: todo = [ lyr for lyr in layers if await lyr.getModelVers() < revvers ] if not todo: continue logger.warning(f'beginning model migration -> {revvers}') await revmeth(todo) [await lyr.setModelVers(revvers) for lyr in todo] logger.warning('...model migrations complete!')
async def revCoreLayers(self): version = self.revs[-1][0] # do a first pass to detect layers at the wrong version # that we are not able to rev ourselves and bail... for layr in self.core.layers: vers = await layr.getModelVers() if not layr.canrev and vers != version: mesg = f'layer {layr.__class__.__name__} {layr.iden} ({layr.dirn}) can not be updated.' raise s_exc.CantRevLayer(layer=layr.iden, mesg=mesg) for layr in self.core.layers: # just bump brand new layers all the way up if layr.fresh: await layr.setModelVers(version) continue # skip layers with the right version vers = await layr.getModelVers() if vers == version: continue for revvers, revmeth in self.revs: if vers < revvers: logger.warning( f'beginning model {vers} -> {revvers} (layer: {layr.iden})' ) await revmeth(self.core, layr) await layr.setModelVers(revvers) logger.warning('...complete!') vers = revvers