在CMS座舱中的多线程页面同步期间创建的重复CMS组件

2020-09-04 23:07发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我正在运行Hybris 5.6.0.2。

我遇到了多线程目录同步创建重复项的问题:直接运行cron作业还是通过CMS座舱目录同步运行。 我知道如何查找重复的标识符并自己删除它们,但这对于使用CMS座舱的CMS用户而言,这成为繁琐的任务。 如果我将cron作业配置为仅使用一个线程,则不会发生此问题。

通过执行以下操作,我可以始终如一地重现该问题:

  • 在CMS座舱中,使用源内容目录中的模板创建新的内容页面

  • 覆盖模板中的内容插槽之一

  • 创建一个新的CMS段落组件并将其添加到内容栏

  • 通过页面顶部的按钮同步页面

我发现,多线程同步过程将获取ContentPage,ContentSlot,CMSParagraphComponent和ContentSlotForPage,并尝试同时同步它们。 我假设通过解决子引用的问题,这些工作人员最终会发生冲突,并且对于谁可以首先同步组件和内容插槽具有竞争条件。 大多数情况下,我都会得到两个重复:内容栏和cms段落部分。

多线程同步作业是否缺少某些配置? 我没有从OOTB混合设置更改CMSSynchronizationService中relatedReferencesTypesMap的配置。 日志如下。 再一次,只有在尝试与多个线程同步并且将作业配置为仅使用一个线程运行时,这种情况才会发生,这将使此问题消失,但这似乎浪费了计算资源。

感谢所有帮助!

  16:03:07,561 [DEBUG] [SyncWorker <00000NXB 6 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 6 of 8>已启动
  16:03:07,561 [DEBUG] [SyncWorker <00000NXB 5 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 5 of 8>已启动
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 4 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 4 of 8>已启动
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 2 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 2 of 8>已启动
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 6 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 6 of 8>获取<8796420867120-> null []>(ContentPage)
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 3 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 3 of 8>已启动
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 7 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 7 of 8>已启动
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 8 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 8 of 8>已启动
  16:03:07,563 [DEBUG] [SyncWorker <00000NXB 1 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 1 of 8>已启动
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 5 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 5 of 8>获取<8796421030954-> null []>(ContentSlot)
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 2 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 2 of 8>获取<8796388230204-> null []>(段落组件)
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 4 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 4 of 8>获取了<8796420932655-> null []>(页面的内容槽)
  16:03:07,668 [ERROR] [SyncWorker <00000NXB 2 of 8>](00000NXB)[AbstractItemCopyContext]为8796388230204和作业同步内容发现了多个同步时间戳目录:Staged-> Online:预期目标8796388262972972,但是发现了[8796388295740]
  16:03:08,252 [DEBUG] [Thread-28](00000NXB)[CatalogVersionSyncMaster] Stats <00000NXB maxLine:4(+4)dumped:1(+1)cache:0%(hits:0,misses:9 total)  >
  16:03:08,253 [INFO] [Thread-28](00000NXB)[CatalogVersionSyncMaster] 1.通过,0(+0)的0个项目已处理(0%),0.00个项目/秒,1(+1,死锁:0  )项被丢弃。
  16:03:08,266 [DEBUG] [Thread-28](00000NXB)[CatalogVersionSyncCronJob]在媒体sync_schedule_8797207396853(8798814535710)中保存了1个转储
  16:03:08,271 [DEBUG] [Thread-28](00000NXB)[CatalogVersionSyncMaster]完成同步00000NXB(第1行,第0行,先前的转储-1,当前的转储1)
  16:03:08,278 [DEBUG] [Thread-28](00000NXB)[CatalogVersionSyncMaster]开始同步00000NXB [8797207396853](转2,上一个转储1,跳过0的行,调用1)
  16:03:08,279 [DEBUG] [SyncWorker <00000NXB 3 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 3 of 8>获取<8796420932655-> null []>
  16:03:08,285 [ERROR] [SyncWorker <00000NXB 3 of 8>](00000NXB)[AbstractItemCopyContext]为8796421030954找到重复的对应项:得到8796421096490并发现8796421063722-忽略第二个匹配项
  16:03:08,296 [DEBUG] [Thread-28](00000NXB)[CatalogVersionSyncMaster] Stats <00000NXB maxLine:4(+4)转储:-1(+ -1)缓存:0%(命中:0,未命中:12 总计)>
  16:03:08,297 [INFO] [Thread-28](00000NXB)[CatalogVersionSyncMaster] 2.通过,0(+0)的1个项目已处理(0%),0.00个项目/秒,0(+0,死锁:0  )项被丢弃。
  

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我正在运行Hybris 5.6.0.2。

我遇到了多线程目录同步创建重复项的问题:直接运行cron作业还是通过CMS座舱目录同步运行。 我知道如何查找重复的标识符并自己删除它们,但这对于使用CMS座舱的CMS用户而言,这成为繁琐的任务。 如果我将cron作业配置为仅使用一个线程,则不会发生此问题。

通过执行以下操作,我可以始终如一地重现该问题:

  • 在CMS座舱中,使用源内容目录中的模板创建新的内容页面

  • 覆盖模板中的内容插槽之一

  • 创建一个新的CMS段落组件并将其添加到内容栏

  • 通过页面顶部的按钮同步页面

我发现,多线程同步过程将获取ContentPage,ContentSlot,CMSParagraphComponent和ContentSlotForPage,并尝试同时同步它们。 我假设通过解决子引用的问题,这些工作人员最终会发生冲突,并且对于谁可以首先同步组件和内容插槽具有竞争条件。 大多数情况下,我都会得到两个重复:内容栏和cms段落部分。

多线程同步作业是否缺少某些配置? 我没有从OOTB混合设置更改CMSSynchronizationService中relatedReferencesTypesMap的配置。 日志如下。 再一次,只有在尝试与多个线程同步并且将作业配置为仅使用一个线程运行时,这种情况才会发生,这将使此问题消失,但这似乎浪费了计算资源。

感谢所有帮助!

  16:03:07,561 [DEBUG] [SyncWorker <00000NXB 6 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 6 of 8>已启动
  16:03:07,561 [DEBUG] [SyncWorker <00000NXB 5 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 5 of 8>已启动
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 4 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 4 of 8>已启动
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 2 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 2 of 8>已启动
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 6 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 6 of 8>获取<8796420867120-> null []>(ContentPage)
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 3 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 3 of 8>已启动
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 7 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 7 of 8>已启动
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 8 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 8 of 8>已启动
  16:03:07,563 [DEBUG] [SyncWorker <00000NXB 1 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 1 of 8>已启动
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 5 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 5 of 8>获取<8796421030954-> null []>(ContentSlot)
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 2 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 2 of 8>获取<8796388230204-> null []>(段落组件)
  16:03:07,565 [DEBUG] [SyncWorker <00000NXB 4 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 4 of 8>获取了<8796420932655-> null []>(页面的内容槽)
  16:03:07,668 [ERROR] [SyncWorker <00000NXB 2 of 8>](00000NXB)[AbstractItemCopyContext]为8796388230204和作业同步内容发现了多个同步时间戳目录:Staged-> Online:预期目标8796388262972972,但是发现了[8796388295740]
  16:03:08,252 [DEBUG] [Thread-28](00000NXB)[CatalogVersionSyncMaster] Stats <00000NXB maxLine:4(+4)dumped:1(+1)cache:0%(hits:0,misses:9 total)  >
  16:03:08,253 [INFO] [Thread-28](00000NXB)[CatalogVersionSyncMaster] 1.通过,0(+0)的0个项目已处理(0%),0.00个项目/秒,1(+1,死锁:0  )项被丢弃。
  16:03:08,266 [DEBUG] [Thread-28](00000NXB)[CatalogVersionSyncCronJob]在媒体sync_schedule_8797207396853(8798814535710)中保存了1个转储
  16:03:08,271 [DEBUG] [Thread-28](00000NXB)[CatalogVersionSyncMaster]完成同步00000NXB(第1行,第0行,先前的转储-1,当前的转储1)
  16:03:08,278 [DEBUG] [Thread-28](00000NXB)[CatalogVersionSyncMaster]开始同步00000NXB [8797207396853](转2,上一个转储1,跳过0的行,调用1)
  16:03:08,279 [DEBUG] [SyncWorker <00000NXB 3 of 8>](00000NXB)[CatalogVersionSyncWorker]同步工作器SyncWorker <00000NXB 3 of 8>获取<8796420932655-> null []>
  16:03:08,285 [ERROR] [SyncWorker <00000NXB 3 of 8>](00000NXB)[AbstractItemCopyContext]为8796421030954找到重复的对应项:得到8796421096490并发现8796421063722-忽略第二个匹配项
  16:03:08,296 [DEBUG] [Thread-28](00000NXB)[CatalogVersionSyncMaster] Stats <00000NXB maxLine:4(+4)转储:-1(+ -1)缓存:0%(命中:0,未命中:12 总计)>
  16:03:08,297 [INFO] [Thread-28](00000NXB)[CatalogVersionSyncMaster] 2.通过,0(+0)的1个项目已处理(0%),0.00个项目/秒,0(+0,死锁:0  )项被丢弃。
  
付费偷看设置
发送
3条回答
何必丶何苦呢
1楼-- · 2020-09-04 23:38

您好Prahlad/Mischael,

您对此有任何解决方案吗? 如果是,则请分享/

SC_Yao
2楼-- · 2020-09-04 23:44

嗨,迈克尔,

我在Hybris 5.7上遇到了同样的问题,您对此有任何解决方案吗?

谢谢Prahlad

lukcy2020
3楼-- · 2020-09-04 23:49

嗨,

如果检查itemType的索引syncIDX,则itemSyncTimestamp在catalog-items.xml中定义为唯一。

此唯一索引syncIDX将防止创建重复的同步时间戳,并导致回退该特定项目的完整同步,并防止创建这些重复的CMS项目。

请执行以下步骤来解决此问题-

要确认表itemsynctimestamps是否包含重复的时间戳,请在FlexiSeacrch查询下面执行-

从{ITEMSYNCTIMESTAMP}组中按{SOURCEITEM},{TARGETVERSION},{SYNCJOB}的{ITEMSYNCTIMESTAMP}组中选择{SOURCEITEM},{TARGETVERSION},{SYNCJOB},计数(*)> 1

删除重复的itemsynctimestamps,因为它会阻止创建唯一索引:保留最新的同步itemsynctimestamps记录并删除旧的记录。

删除现有索引并重新创建为唯一索引,例如:

ALTER TABLE itemsynctimestamps DROP INDEX syncIDX_619 ,添加唯一索引 syncIDX_619 (`p_sourceitem` ASC, p_targetversion ASC , p_syncjob ASC);

在运行同步作业之前从目录中删除重复的项目。

将同步作业线程(catalog.sync.workers)设置为1

一周热门 更多>