#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2023/5/9 14:22 # @Author : old tom # @File : metadata_version.py # @Project : futool-tiny-datahub # @Desc : 元数据版本管理 from datahub.metadata.metadatadao.metadata_version_dao import MetadataVersionDao from datahub.local_db_conf import local_conn from datahub.log_conf import log import threading lock = threading.RLock() class MetadataVersionKeeper(object): """ 元数据版本管理器 """ def __init__(self, source_id): self.source_id = source_id self.dao = MetadataVersionDao(local_conn) def init_version(self): """ 初始化版本号 :return: """ flag = (self.dao.init_version(self.source_id) == 1) if flag: log.info(f"[{self.source_id}] 数据源初始化版本成功") else: log.error(f"[{self.source_id}] 数据源初始化版本失败") def get_latest_version(self): """ 获取最新版本 :return: """ return self.dao.query_latest_version(self.source_id) def increase_version(self): """ 递增并返回最新版本 读改写加锁,多进程下锁无效 :return: """ try: lock.acquire() return self.dao.add_version(self.source_id) finally: lock.release()