[SEN] 实现 MediaMTX 分片分配与故障范围可观察 #77
Closed
opened 2026-08-14 10:29:14 +08:00 by ila
·
5 comments
No Branch/Tag Specified
dev
feat/183-bell-contact-schedule
docs/171-coordination-e2e-wiki
feature/155-coordination-e2e
docs/168-sync-coordination-wiki
feature/154-coordination-deployment
docs/152-153-connectors
feature/153-event-evidence-connector
feature/152-brain-control
docs/151-machine-identity-acceptance
task/151-machine-identity
docs/150-contract-acceptance
docs/148-149-contract-acceptance
feature/149-runtime-status-contract
feature/150-event-evidence-contract
feature/148-source-config-contract
docs/8-mvp-acceptance
feature/145-sense-e2e-isolation-cleanup
feature/134-bell-independent-e2e
feature/142-bell-ui-shell-startup
feature/140-bell-minimal-admin-menu
feature/138-bell-production-captcha
feature/133-bell-alert-lifecycle
feature/132-bell-rule-alert
feature/131-bell-event-receipt
feature/16-brain-local-events
feature/15-brain-rules
feature/14-brain-vision
feature/13-brain-decode
feature/11-brain-input
main
feat/sense-79-ops-alerts
feat/sense-78-outbox
feat/77-sense-media-shards
feat/76-sense-edge-node-status
feat/75-sense-quota-capacity
feature/74-sense-operations
feature/73-sense-local-events
feature/72-sense-bulk-provisioning
feature/113-record-parallel-acceptance
feature/113-sync-parallel-implementation-docs
feature/71-sense-e2e-regression
feature/62-bell-goadmin-skeleton
feature/10-brain-python-cuda-skeleton
feature/108-sync-devharness
feature/90-sense-root-launcher
feature/106-supervisor-sense
fix/101-sense-layout-shell
feature/104-sense-login-30-days
docs/99-acceptance
feature/99-sense-app-config
feature/70-sense-windows-delivery
fix/95-sense-media-path-constraint
feature/97-sense-password-login
docs/92-acceptance
fix/92-sense-capabilities-jsonb
docs/69-acceptance
feature/69-sense-area
feature/68-sense-liveview
feature/67-sense-mediamtx-reconcile
feature/66-sense-onvif-admission
feature/65-sense-device-credential
feature/64-sense-auth-rbac-audit
feature/61-sense-goadmin-source-baseline
docs/acceptance-batch-20260814
coordination/58-finalize-branch-governance
explore
agent/codex/56-sense-device-edit-payload
agent/codex/54-sense-liveview-on-demand
agent/codex/51-sense-auto-liveview
agent/codex/50-sense-split-camera-credentials
agent/codex/48-sense-onvif-digest
agent/codex/46-sense-env-loader
agent/codex/44-sense-empty-navigation
agent/codex/42-sense-password-length-only
agent/codex/40-sense-password-min-6
agent/codex/37-sense-windows-package
agent/codex/36-bell-docs
agent/codex/9-bell-mvp
agent/codex/21-sense-mvp
agent/codex/28-current-prototypes
agent/codex/5-goadmin-baseline
agent/codex/3-go-admin-ui-reuse
agent/codex/1-collaboration-rules
No results found.
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: ila/yovision#77
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
状态
已完成(用户已验收)
基本信息
原始需求与追溯
explore只用于需求、行为与测试对照,不复制自研基础框架。目标
在 Sense 内管理多个 MediaMTX 分片的容量、路径分配和故障影响范围,使容量来自压测与配置而非硬编码。
范围
实现媒体分片台账、容量指标、稳定分配、故障范围展示和只读迁移预检。
非目标
不实现 Brain 分片;不执行跨分片高风险迁移;不修改根级部署;不发布共享控制契约。
GoAdmin 复用要求
复用 #61/#64 建立的 GoAdmin/go-admin-ui 认证、RBAC、审计、Router、Store、Axios、Layout、表格、表单、分页、Dialog、Tag 和权限按钮;实施前读取相关冻结 go-admin-doc 并在评论记录采用方式。业务专用组件必须说明复用缺口并保持整体风格。
写路径
Sense/server/app/sense/media_shard/**Sense/server/database/migrations/*media_shard*Sense/ui/src/views/sense/media-shard/**Sense/ui/src/api/sense/media-shard*Sense/tests/media_shard/**禁止写入:
Brain/**、Bell/**、contracts/**、根级构建/部署、docs/**、wiki-docs.json。需要共享路径时停止并转协调工单。文档影响
更新对应 Sense Wiki 业务规则、配置、运行、排错和验收页面;本地镜像由单一协调工单同步。
验收标准
验证方式
风险与回退
错误分配可扩大视频中断。迁移默认禁用,分配变更需审计;回退到原分片映射。
协同需求摘要
本工单只实现 Sense 内部端口和夹具。涉及 Sense→Brain、Brain→Sense、Sense/Brain→Bell 的正式 schema、机器身份、部署或 E2E 时另建协调工单。
设计证据门禁:原型 v0.1 待审核(2026-08-28)
前置工单 #67、#75、#76 均已关闭,依赖满足。由于本工单新增“媒体分片”列表、详情、故障影响范围与迁移预检交互,按双门禁先提交可审阅原型;用户确认前不实施生产代码。
版本与识别
Sense 媒体分片交互原型D:\OPC\yovision-visualizations\issue-77\sense-media-shards.htmlprototypes/;用户未要求离线原型交付覆盖范围
原型验证
设计取舍
ui-ux-pro-max用于校准数据密度、故障影响表达、非颜色单一编码、加载反馈、响应式与可访问性;视觉仍严格沿用已确认的 GoAdmin/Element Plus 管理端风格,没有采用其建议中与现有产品不一致的玫红配色或独立字体。非目标
原型不实现数据库模型、稳定分配算法、多个真实 MediaMTX 进程、迁移执行、Brain 分片、共享控制契约、根级部署或生产容量承诺。
原型 v0.1 用户审核通过
#77 原型 v0.1通过审核Sense 媒体分片原型 v0.1;仓库外源文件D:\OPC\yovision-visualizations\issue-77\sense-media-shards.html正式实现基线(原型 v0.1 审核后)
goadmin-baseline.json;已阅读冻结go-admin-doc的 Router、API、Models、DTO、Service、DB 主题。sense_media_shards保存 Sense 自有分片台账与健康投影;sense_media_shard_assignments保存 route→shard 稳定归属。现有sense_media_routes继续是路径运行状态事实源,不复制凭据或 Stream URI。更正实际写路径
原工单仍使用旧目录描述;按当前 GoAdmin 派生结构,正式实现需要:
Sense/server/app/sense/media_shard/**Sense/server/app/sense/media/{runtime.go,service.go,service_test.go,dto.go}(接入稳定归属与按分片 Controller;不重写媒体内核)Sense/server/app/admin/router/sense_media_shard*.goSense/server/cmd/migrate/migration/version/*media_shard*.goSense/ui/src/views/sense/media-shard/**Sense/ui/src/api/sense/media-shard.jsSense/ui/tests/unit/sense/mediaShard*.spec.jsSense/config/*.example、Sense/scripts/runtime/**中现有 SENSE_* 白名单/示例(如新增分片配置字段确有需要)docs/镜像。不写入 Brain/Bell/contracts 或根级部署;额外受管多进程、真实迁移执行、Brain 分片和跨项目协议继续排除。
实现完成,转待验收
最终差异
sense_media_shards与sense_media_shard_assignments,保留既有sense_media_routes为路径状态事实源。rendezvous-v1确定性分配;候选分片行加锁后统计占用,避免并发超配。已有归属在故障时保持稳定,不自动迁移。SENSE_MEDIAMTX_CAPACITY、SENSE_MEDIAMTX_SHARDS_FILE,相对路径按包根解析;交付包包含无秘密 JSON 示例。验证结果
go test ./...:通过。go vet ./...:通过。go test -race ./app/sense/media ./app/sense/media_shard ./cmd/migrate/migration/version:通过。pnpm lint:0 error(32 条既有 warning)。pnpm build:prod:通过(既有 Sass、codemirror 与体积 warning)。python dev_scripts/harness.py check --strict:通过。sync --check:全部核心镜像一致。SENSE_MEDIA_SHARD_MIGRATION_TEST_DATABASE_URL未提供,因此 PostgreSQL 隔离 schema 迁移测试未执行;SQLite 迁移、权限与无夹具验证通过。没有使用现有生产/开发库代替专用测试库。文档
已在线更新并回读:
578ddbaae3d7e846037d958085e40609cd398bef999eb1aee3558ff75cfa929acac77841af20b742ce246054849b5b797dc4da0a55116238a4c00d7e05435d53528271a866c525655486689afc198762核心镜像已随实现提交。无任务归档:用户未要求导出。
Git / PR
d681fd13450f47b4f27efc0e8fd46383df0ee08adev:e06904272ad7cacfc6e79f92c76e2fdb0668458e回退
回退该合并提交与对应 Wiki 变更;数据库表为新增投影表。不要手工移动既有路径归属。若需实施跨分片迁移,必须另建高风险工单。
用户验收通过
#77通过验收dev合并提交e06904272ad7cacfc6e79f92c76e2fdb0668458e,PR #121。dev → main合并。