我正在基于配置文件将Erlang应用程序动态加载到系统中,这会导致我在启动时启动分布式应用程序 - 我能够使故障转移工作,但不能进行故障恢复(或者在OTP条款中) ,接管。)
假设我有NodeA运行应用程序,NodeB作为故障转移节点。我在NodeA上拉线,应用程序迁移到NodeB。这是预料之中的。但是,当我将NodeA重新联机并尝试拨打application:start(MyApp)
时,我得到了:
{error, {shutdown,{myapp, start, [normal,["config.xml"]]}}}
这表明应用程序无法启动。
无论如何,它都无法启动,因为我已经在其他NodeB上运行了主管,而且我已经net_adm:将它们ping在一起。
我想我可以在MyApp上调用application:takeover / 2来控制节点,并在另一个节点上终止应用程序。
{error,{not_running_distributed, MyApp}}
但这也不起作用。我的节点优先级列表是[NodeA, {NodeB, NodeC}]
,所以我认为应用程序会知道在重新联机后移动到更高优先级的节点。
如何在这种情况下实施Takeover?
答案 0 :(得分:0)
您可能需要改为使用application:takeover/2
。