From 27223bf2b584ab58b96717e79ffc7af094442fae Mon Sep 17 00:00:00 2001 From: deepin-wm Date: Tue, 23 Jun 2026 18:09:52 +0800 Subject: [PATCH] fix: remove old cache on serial upgrade in repareCache MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Add serial upgrade handling in repareCache() to remove old cache values when newMeta serial is greater than oldMeta serial 2. Add debug log for serial upgrade cache removal Log: Fixed dconfig write failure after serial upgrade Influence: 1. Test that cache values are removed when serial is upgraded 2. Verify dconfig set succeeds after serial upgrade with same value 3. Test that repareCache handles serial downgrade gracefully fix: repareCache添加serial升级时移除旧缓存处理 1. 在repareCache()中添加serial升级处理逻辑,当新meta的 serial大于旧meta的serial时移除旧缓存值 2. 添加serial升级缓存移除的调试日志 Log: 修复dconfig serial升级后写入相同值失败的问题 Influence: 1. 测试serial升级时缓存值是否被正确移除 2. 验证serial升级后使用相同值设置dconfig是否成功 3. 测试repareCache对serial降级的处理 --- dconfig-center/dde-dconfig-daemon/dconfigresource.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dconfig-center/dde-dconfig-daemon/dconfigresource.cpp b/dconfig-center/dde-dconfig-daemon/dconfigresource.cpp index 6295747..b08759b 100644 --- a/dconfig-center/dde-dconfig-daemon/dconfigresource.cpp +++ b/dconfig-center/dde-dconfig-daemon/dconfigresource.cpp @@ -411,6 +411,14 @@ void DSGConfigResource::repareCache(DConfigCache *cache, DConfigMeta *oldMeta, D qPrintable(m_key), cache->uid(), qPrintable(key)); } } + // Serial升级时移除旧缓存值,serial升级意味着旧值必须废弃 + for (const auto &key : intersectKeys) { + if (newMeta->serial(key) > oldMeta->serial(key)) { + cache->remove(key); + qDebug(cfLog, "Cache removed because of serial upgraded, resource:%s, uid:%d, key:%s.", + qPrintable(m_key), cache->uid(), qPrintable(key)); + } + } } GenericResourceKey DSGConfigResource::key() const