#!/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 Logger import threading lock = threading.RLock() logger = Logger().get_logger() 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: logger.info(f"[{self.source_id}] 数据源初始化版本成功") else: logger.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() if __name__ == '__main__': version_keeper = MetadataVersionKeeper('834164a2d62de959c0261e6239dd1e55') # 多线程测试 # for i in range(100): # print(version_keeper.increase_version())