2016-12-20 6 views
0

Я хочу сделать несколько тестов Akka Multi Node и перезапустить один узел, когда достигнут какой-либо барьер. Что-то вроде:Как перезапустить узел в тесте Akka Multi Node?

runOn(nodeA) { 
    // do something while both nodes are up and running 

    enterBarrier("nodeBCrashes") 

    // do something while I'm the only node up and running 

    enterBarrier("bothNodesUp") 

    // do something with both nodes up and running again 
} 

runOn(nodeB) { 
    // do something while both nodes are up and running 

    crash() 
    enterBarrier("nodeBCrashes") 

    // do nothing because I'm out 

    enterBarrier("bothNodesUp") 
    start() 

    // do something with both nodes up and running again 

} 

Это не может быть сделано, по крайней мере, нужен способ, чтобы иметь возможность выключать Узлом и инициировать другой nodeC с тем же akka.remote.netty.tcp.port (это строго необходимо). Что-то вроде этого

runOn(nodeA) { 
    // do something while both nodes are up and running 

    enterBarrier("nodeBCrashes") 

    // do something while I'm the only node up and running 

    enterBarrier("bothNodesUp") 

    // do something with both nodes up and running again 
} 

runOn(nodeB) { 
    // do something while both nodes are up and running 

    enterBarrier("nodeBCrashes") 
    shutdown() 

} 

// How I can delay nodeC start until nodeA reaches bothNodesUp barrier? 
runOn(nodeC) {  
    // do something when both nodes are up and running 
} 

Вопрос может быть возобновлено на:

Можно ли воссоздать ситуацию, когда один узел выходит из строя, а затем перезагружается?

  1. Можем ли мы перезапустить узел?
  2. Если нет, можем ли мы запустить узел, когда остальные из них достигнут бербера?
  3. Можно ли назначить один и тот же akka.remote.netty.tcp.port для разных узлов (которые не должны запускаться параллельно). Я пробовал файлы *.opts, но безуспешно, так ли это?

ответ

1

Вы должны иметь возможность перезагрузить ActorSystem, повторно используя один и тот же порт разбившегося. В собственных тестах многоузловых AKKA в них что-то вдоль линий:

lazy val restartedSecondSystem = ActorSystem(
    system, 
    ConfigFactory.parseString("akka.remote.netty.tcp.port=" + secondUniqueAddress.address.port.get). 
     withFallback(system.settings.config)) 

    ...  

    runOn(nodeB) {   
    shutdown(secondSystem) 
    } 

    enterBarrier("second-shutdown") 

    runOn(nodeB) { 
    Cluster(restartedSecondSystem).joinSeedNodes(seedNodes) 
    } 

Checkout следующих тестов в исходном коде AKKA, чтобы получить больше подсказок.

https://github.com/akka/akka/blob/master/akka-cluster/src/multi-jvm/scala/akka/cluster/RestartNodeSpec.scala

https://github.com/akka/akka/blob/master/akka-cluster/src/multi-jvm/scala/akka/cluster/RestartNode2Spec.scala

https://github.com/akka/akka/blob/master/akka-cluster/src/multi-jvm/scala/akka/cluster/RestartNode3Spec.scala

 Смежные вопросы

  • Нет связанных вопросов^_^