Files
SMANAGE/ATestCServer/apps/sub_server/apps.py
T
TermiNexus e95d77d0f7 fix(msync): 修复主从链路验证暴露的缺陷,ATestCServer 自动化实验 6/6 通过
- Main.py: Host 白名单剥离端口再匹配,放行 127.0.0.1:8000 自省请求
- ATestCServer: 新增 /api/msync/local/* SDK 契约路由、实验处理器
  模块 local_handlers(随服务进程注册)、local/reset 状态重置端点;
  msync_experiment 命令 check 改名 record 并简化补偿/重试逻辑
- gvsdsdk msync 模型与迁移 0001 的 FK db_column 同步(与独立仓一致)
2026-08-10 23:09:08 +08:00

73 lines
2.8 KiB
Python

"""模块:子服务器 AppConfig
Django 启动时自动完成 MSYNC Socket.IO 桥接——连接、注册、认证、心跳。"""
import logging
import threading
from django.apps import AppConfig
from django.conf import settings
logger = logging.getLogger(__name__)
# 与主服务器约定的 SDK 最低版本——版本不一致时启动警告
REQUIRED_GVSDSDK_VERSION = '1.1.0'
class SubServerConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.sub_server'
verbose_name = 'SMANAGE 子服务器'
verbose_name_plural = 'SMANAGE 子服务器'
def ready(self):
# 1) 校验 gvsdsdk 版本与主服务器一致
self._check_sdk_version()
# 2) 注册实验本地事务处理器(供主服务器 Saga 编排回调)
self._register_local_handlers()
# 3) 启动 MSYNC 桥接
self._connect_msync()
def _register_local_handlers(self):
try:
from .local_handlers import RegisterExperimentHandlers
RegisterExperimentHandlers()
logger.info('实验本地事务处理器已注册: demo_a/demo_b/demo_fail/demo_flaky')
except Exception as e:
logger.error(f'实验本地事务处理器注册失败: {e}')
def _check_sdk_version(self):
try:
import gvsdsdk
info = gvsdsdk.get_version_info()
logger.info(f'[SDK] 加载: v{info["Version"]} @ {info["Location"]}')
ok, msg = gvsdsdk.check_min_version(REQUIRED_GVSDSDK_VERSION)
if ok:
logger.info(f'[SDK] {msg}')
else:
logger.warning(f'[SDK] 版本不符!{msg}。双端 gvsdsdk 版本必须一致!')
except ImportError as e:
logger.error(f'[SDK] gvsdsdk 未安装: {e}')
except Exception as e:
logger.error(f'[SDK] 版本检查失败: {e}')
def _connect_msync(self):
try:
from msync_client.sio_client import MSyncSocketClient
msync_client = MSyncSocketClient(
master_url=settings.MSYNC_MASTER_URL,
service_name=settings.MSYNC_SERVICE_NAME,
service_domain=settings.MSYNC_SERVICE_DOMAIN,
service_secret=settings.MSYNC_SERVICE_SECRET,
scope=settings.MSYNC_SERVICE_SCOPE,
heartbeat_interval=settings.MSYNC_HEARTBEAT_INTERVAL,
metadata={'DBName': settings.DATABASES['default']['NAME']},
)
setattr(settings, 'MSYNC_CLIENT', msync_client)
t = threading.Thread(target=msync_client.Connect, daemon=True)
t.start()
logger.info('MSYNC Socket.IO 桥接线程已启动')
except Exception as e:
logger.error(f'MSYNC 桥接启动失败: {e}')