Changed design of RemoteWatcher due to cleanup race, see #3265

* The problem was a race caused by HeartbeatReq sent out, and
  the watchee terminated immediately. That caused the RemoteWatcher
  peers watching each other without any other watch registered.
  It is racy.
* Instead of one-way heartbeats from the side beeing watched I
  changed to ping-pong style. That makes the problem go away
  and simplifies a lot of things in RemoteWatcher.
This commit is contained in:
Patrik Nordwall 2013-05-04 16:22:40 +02:00
parent cb6ba83f38
commit 7628889b43
10 changed files with 89 additions and 221 deletions

View file

@ -191,8 +191,7 @@ private[akka] class RemoteActorRefProvider(
failureDetector,
heartbeatInterval = WatchHeartBeatInterval,
unreachableReaperInterval = WatchUnreachableReaperInterval,
heartbeatExpectedResponseAfter = WatchHeartbeatExpectedResponseAfter,
numberOfEndHeartbeatRequests = WatchNumberOfEndHeartbeatRequests), "remote-watcher")
heartbeatExpectedResponseAfter = WatchHeartbeatExpectedResponseAfter), "remote-watcher")
}
protected def createRemoteWatcherFailureDetector(system: ExtendedActorSystem): FailureDetectorRegistry[Address] = {