예제 #1
0
파일: modelrev.py 프로젝트: enadjoe/synapse
    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!')
예제 #2
0
    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