Skip to content

[Tracking] D-Bus service startup race / dependency ordering #826

Open

Description

@Ivy233

背景

dde-launchpad 在启动阶段会创建 Appearance 并读取 org.deepin.dde.Appearance1 的属性(WallpaperURls、Opacity 等)。该服务可能由 D-Bus 激活,注册时间晚于 dde-shell/launcher:

  • 正常会话日志中可见 dde-appearance 插件先报 Failed to proxy Appearance,随后 org.deepin.dde.Appearance1 才注册/激活(本机多次启动中注册晚约 2~5 秒);
  • 服务未就绪时代理 isValid() 为 false,生成的属性 getter 会返回缓存空值,导致 Get wallpapers failed: illegal value,opacity 也可能停留在 QML 兜底值;
  • PR fix: guard launcher applet against unavailable dock panel and appeara… #820 曾包含 QDBusServiceWatcher/空值分支的局部兜底,但按本决议已撤回。

决议

不在 dde-launchpad 侧修复该启动竞态。此类问题的根因是 D-Bus 服务依赖顺序,计划由 dde-session 维护一份 D-Bus 依赖 DAG,在启动/激活时保证被依赖服务先就绪,从整体上规避各消费者各自做 watcher/重试。PR #820 已移除 appearance 相关改动,仅保留 autostart 读取修复。

待办

验收

正常登录/重启 dde-shell 时,launcher 首次读取 org.deepin.dde.Appearance1 不再遇到服务未注册;notification 读取 org.desktopspec.ConfigManager 时不再出现 Invalid settings of bubbleCount/bubbleContentRowCount 启动误报;Get wallpapers failed / opacity 回退问题不再出现,且无需在各消费者中重复实现 watcher 重试。

2026-10-22 扩展:dde-shell notification W078 / displaymode W079(org.desktopspec.ConfigManager)

同一类 D-Bus 服务启动竞态也出现在 dde-shell 的 notification:

  • 告警:Invalid settings of bubbleCount/bubbleContentRowCount: 0。
  • 根因:NotifySetting 构造时 org.desktopspec.ConfigManager(dde-dconfig-daemon)尚未注册,DConfig::value() 返回 invalid,.toInt() 得 0,命中 <1 判据。
  • 曾在 dde-shell PR #1777 中加入 QDBusServiceWatcher 局部兜底;评审人 18202781743 于 2026-10-22 在 panels/notification/common/notifysetting.cpp:48 明确表示“不需要这个”(评论)。
  • 决议:W078 移入“已决议不修复”,不在 dde-shell notification 侧保留 watcher;与 W049/W067 一样,由本 issue 跟踪的 dde-session D-Bus 依赖 DAG 统一保证 org.desktopspec.ConfigManager 先于通知服务就绪。
  • 补充:该 watcher 的重取本身是空操作(DConfig 失败后不自愈,需重建 DConfig),去掉它不损失实际恢复能力,只保留启动期误报。
  • 代码撤回:dde-shell PR #1777 已撤回 W078(notifysetting.cpp)与 W079(displaymodeapplet.cpp),并 rebase 到 master dd78a6ce,head 09c6592d(3 个文件,+32/-4);当前 diff 仅 W075/W081。
  • W079(displaymode):org.desktopspec.ConfigManager 的同类 watcher/guard 也按本 issue 原则撤回;1005 A/B 曾通过,但自然触发依赖 mask daemon,按“等真实出现再修”处理。

Activity

  1. Ivy233 commented on Oct 21, 2026

    @Ivy233
    ContributorAuthor

    补充一组 dde-shell 侧(W049)journal 时序样例,佐证 org.deepin.dde.Appearance1 的注册确实晚于消费者,和本 issue 的 W067 是同一根因。

    环境:PENI1731,dde-shell 2.0.59(未包含 W049 本地守卫),正常 systemd 会话启动。

    样例 1(2026-10-19):

    09:26:42 dde-shell[6495]: Failed to proxy Appearance, error: QDBusError("", "")
    09:26:43 dbus-daemon[5586]: Activating via systemd: service name='org.deepin.dde.Appearance1' unit='deepin-service-manager.service' requested by ... dde-shell -p org.deepin.ds.desktop
    09:26:44 deepin-service-manager[6787]: service register:  "org.deepin.dde.Appearance1"
    09:26:47 dbus-daemon[5586]: Successfully activated service 'org.deepin.dde.Appearance1'
    

    样例 2(2026-10-14):

    15:34:59 dde-shell[4470]: Failed to proxy Appearance, error: QDBusError("", "")
    15:35:00 deepin-service-manager[4770]: service register:  "org.deepin.dde.Appearance1"
    15:35:04 dbus-daemon[3542]: Successfully activated service 'org.deepin.dde.Appearance1'
    

    两组的告警都早于注册/激活约 1~5 秒。对应代码:

    • dde-shell:AppearanceApplet::initDBusProxy(),applets/dde-appearance/appearanceapplet.cpp:46,服务未就绪时无条件创建的代理 isValid()==false 且 lastError() 为空;
    • dde-launchpad:Appearance::updateAllWallpaper(),src/ddeintegration/appearance.cpp:121,服务未就绪时 wallpaperURls() 返回空串,QJsonDocument::fromJson("") 触发 Get wallpapers failed: illegal value。

    处置:W049 已从 dde-shell wip/wall-batch3-unverified 移除(bc350851 → dd2e5a95),不在消费侧继续加局部 watcher/守卫,统一等待 dde-session 的 D-Bus 依赖 DAG 解决。特此把样例补到本 issue 备查。

  2. changed the title [-][Tracking] Appearance service startup race / D-Bus dependency ordering[/-] [+][Tracking] D-Bus service startup race / dependency ordering[/+] on Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions