无法使用 SchedulerStateManagerAdaptor 更新 Heron 拓扑



当我尝试创建苍鹭的自定义调度程序,并使用调度程序状态管理器Apaptor对象来更新拓扑时,发生了以下异常:

Exception in thread java.util.ConcurrentModificationException: The update lock can not be obtained for topology AuroraMonitorSentenceWordCountTopology. Another actor is performing an update on it. Failing this request, try again once current update is complete
at com.twitter.heron.scheduler.UpdateTopologyManager.updateTopology(UpdateTopologyManager.java:117)
at zyt.custom.my.scheduler.aurora.AuroraHotEdgeSchedulerWithTxtLog.triggerSchedule(AuroraHotEdgeSchedulerWithTxtLog.java:323)
at zyt.custom.my.scheduler.aurora.AuroraHotEdgeSchedulerWithTxtLog.access$400(AuroraHotEdgeSchedulerWithTxtLog.java:55)
at zyt.custom.my.scheduler.aurora.AuroraHotEdgeSchedulerWithTxtLog$2.run(AuroraHotEdgeSchedulerWithTxtLog.java:258)
at java.lang.Thread.run(Thread.java:748)

以及实例化 SchedulerStateManagerAdaptor 对象的代码如下:

Config config = Config.toClusterMode(this.config);
String stateMgrClass = Context.stateManagerClass(config); // get state manager instance
IStateManager stateMgr = null;
try {
stateMgr = ReflectionUtils.newInstance(stateMgrClass);
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
stateMgr.initialize(config);
return stateManagerAdaptor = new SchedulerStateManagerAdaptor(stateMgr, 1000); // 5000: timeout

如何解决此异常?感谢您的帮助!

一田 - 您是否正在尝试创建新的 Aurora 调度程序?

根据异常消息,在计划第二个更新操作时,将执行一个更新操作。第一个正在进行的操作会阻止第二个操作继续进行。

那么,您可以干净地尝试更新操作吗?另外,请在更新完成后检查您的实现是否正确释放锁?

最新更新